Hadoop环境

打印 上一主题 下一主题

主题 877|帖子 877|积分 2631

一、连接比赛节点

1.通过工具连接到ip主机

用户hadoop
暗码qweQWE123!@#
使用root登录,或者切换到root
1.1固定IP

①检察网络设置

  1. cd /etc/sysconfig/network-scripts/
复制代码

②编辑

  1. vi ifcfg-ens33
复制代码
③修改及新增

  1. BOOTPROTO=static
  2. ONBOOT="yes"
  3. IPADDR="192.168.200.131"
  4. NETMASK="255.255.255.0"
  5. GATEWAY="192.168.200.2"
  6. DNS1="192.168.200.2"
复制代码
④重启网卡

  1. systemctl restart network
复制代码
2.修改hosts

2.1检察本机名

  1. cat /etc/hosts
复制代码

2.2修改域名和IP地址的映射文件

  1. vi /etc/hosts
复制代码
2.3内容


2.4修改主机名

  1. hostnamectl set-hostname Hadoop
复制代码
3.重启

  1. reboot
复制代码
4.检察


5.ping比赛节点

  1. ping hadoop
复制代码

二、关闭防火墙

1.使用systemctl关闭(暂时)

  1. sudo systemctl stop filewalld
复制代码
2.检察防火墙状态

  1. sudo systemctl status filewalld
复制代码

3.使用service关闭(永世)

  1. sudo service filewalld stop
复制代码

三、设置时间同步

1.检察时间

  1. date
复制代码

2.安装ntpdate


  1. sudo yum -y install ntpdate
复制代码
3.更新yum源

3.1备份

  1. sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 3.3.2
复制代码
3.2下载

  1. sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
复制代码

3.3清空并天生缓存

  1. sudo yum clean all
复制代码

  1. sudo yum makecache
复制代码

4.安装utpdate


  1. sudo yum -y install ntpdate
复制代码
5.同步时间

  1. sudo ntpdate
  2. -u pool.ntp.org
复制代码

四、安装软件

1.切入/usr/local

  1. #删除文件夹下文件
  2. sudo rm -rf  /usr/local
复制代码
2.安装jdk

2.1卸载原有的环境

①检察体系自带的OpenJDK相关文件

  1. rpm -qa | grep java
复制代码
②删除文件

  1. cd /usr/lib/jvm
  2. rm -rf /usr/lib/jvm
复制代码
③卸载

  1. yum -y remove java-1.7.0-openjdk*
复制代码

  1. yum -y remove java-1.8.0-openjdk*
复制代码

2.2安装jdk

①解压缩

  1. tar -zxvf jdk-8u171-linux-x64.tar.gz
复制代码
②设置环境变量

  1. sudo vi /etc/profile
复制代码
③内容

  1. #JAVA_HOME
  2. export JAVA_HOME=/usr/local/jdk1.8.0_171
  3. export PATH=$PATH:$JAVA_HOME/bin
复制代码
④让修改后的文件生效

  1. source /etc/profile
复制代码
⑤检察版本

  1. java -version
复制代码
3.安装hadoop

3.1解压缩

  1. tar -zxvf hadoop-2.9.2.tar.gz
复制代码
3.2hadoop环境变量

  1. sudo vi /etc/profile
复制代码
3.3内容

  1. ##HADOOP_HOME
  2. export HADOOP_HOME=/usr/local/hadoop-2.9.2
  3. export PATH=$PATH:$HADOOP_HOME/bin
  4. export PATH=$PATH:$HADOOP_HOME/sbin
复制代码
3.4将修改后的文件生效

  1. source /etc/profile
复制代码
3.5检察版本

  1. hadoop version
复制代码

4.设置Hadoop集群

  1. #切换到hadoop配置目录下的hadoop
  2. cd /usr/local/hadoop-2.9.2/etc/hadoop/
复制代码
4.1编辑hadoop-env.sh

  1. vi hadoop-env.sh
复制代码
修改JAVA_HOME 路径
  1. export JAVA_HOME=/usr/local/jdk1.8.0_171
复制代码
4.2设置core-site.xml

  1. vi core-site.xml
复制代码
  ----在configuration里----
  1. <property>
  2.   <name>fs.defaultFS</name>
  3.   <value>hdfs://hadoop:9000</value>
  4. </property>
  5. <property>
  6.   <name>hadoop.tmp.dir</name>
  7.   <value>/usr/local/hadoop-2.9.2/data/tmp</value>
  8. </property>
  9. <property>
  10.   <name>dfs.http.address</name>
  11.   <value>0.0.0.0:50070</value>
  12. </property>
复制代码
4.3设置hdfs-site.xml

  1. vi hdfs-site.xml
复制代码
  ----在configuration里----
  1. <property>
  2.   <name>dfs.replication</name>
  3.   <value>1</value>
  4. </property>
复制代码
4.4格式化NameNode

  1. /usr/local/hadoop-2.9.2/bin/hdfs namenode -format
复制代码

4.5设置yarn-env.sh

  1. vi yarn-env.sh
复制代码

  1. export JAVA_HOME=/usr/local/jdk1.8.0_171
复制代码
4.6设置yarn-site.xml

  1. vi yarn-site.xml
复制代码
  ----在configuration里----
  1. <property>
  2.   <name>yarn.nodemanager.aux-services</name>
  3.   <value>mapreduce_shuffle</value>
  4. </property>
  5. <property>
  6.   <name>yarn.resourcemanager.hostname</name>
  7.   <value>hadoop</value>
  8. </property>
  9. <property>
  10.   <name>yarn.resourcemanager.webapp.address</name>
  11.   <value>0.0.0.0:8088</value>
  12. </property>
复制代码
4.7设置mapred-env.sh

  1. vi mapred-env.sh
复制代码
  1. export JAVA_HOME=/usr/local/jdk1.8.0_171
复制代码
4.8重定名

  1. mv mapred-site.xml.template mapred-site.xml
复制代码
①设置mapred-site.xml

  1. vi mapred-site.xml
复制代码
  1. <property>
  2.   <name>mapreduce.framework.name</name>
  3.   <value>yarn</value>
  4. </property>
复制代码
4.9启动

  1. /usr/local/hadoop-2.9.2/sbin/start-all.sh
复制代码
输入yes及暗码

4.10检察是否运行

  1. jps
复制代码

访问 NameNode 的 Web 界面
http://192.168.200.131:50070

访问 ResourceManager 的 Web 界面
http://192.168.200.131:8088

五、ssh免密设置

1.天生密钥

   **回车四次,**所有主机都要实行
  1. ssh-keygen
复制代码

2.将本机公钥文件复制到其它虚拟机上

   **吸收方开机,**所有主机都要实行
  格式,分发时先输入yes后输对应主机的暗码
  1. ssh-copy-id 主机名称
复制代码

3.检察是否乐成免密登录

  1. ssh 主机名称
复制代码

4.启动Hadoop集群

  1. /usr/local/hadoop-2.9.2/sbin/start-all.sh
复制代码

六、代码

1.Windows环境变量

变量名HADOOP_HOME,值为安装目次D:\JavaSoftware\hadoop-2.9.2
2.Path变量

%HADOOP_HOME%\bin
3.创建Maven项目


4.导⼊hadoop依赖

  1. <dependencies>
  2.         <dependency>
  3.             <groupId>org.apache.logging.log4j</groupId>
  4.             <artifactId>log4j-core</artifactId>
  5.             <version>2.8.2</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>org.apache.hadoop</groupId>
  9.             <artifactId>hadoop-common</artifactId>
  10.             <version>2.9.2</version>
  11.         </dependency>
  12.         <dependency>
  13.             <groupId>org.apache.hadoop</groupId>
  14.             <artifactId>hadoop-client</artifactId>
  15.             <version>2.9.2</version>
  16.         </dependency>
  17.         <dependency>
  18.             <groupId>org.apache.hadoop</groupId>
  19.             <artifactId>hadoop-hdfs</artifactId>
  20.             <version>2.9.2</version>
  21.         </dependency>
  22.     </dependencies>
  23.     <!--maven打包插件 -->
  24.     <build>
  25.         <plugins>
  26.             <plugin>
  27.                 <artifactId>maven-compiler-plugin</artifactId>
  28.                 <version>2.3.2</version>
  29.                 <configuration>
  30.                     <source>1.8</source>
  31.                     <target>1.8</target>
  32.                 </configuration>
  33.             </plugin>
  34.             <plugin>
  35.                 <artifactId>maven-assembly-plugin</artifactId>
  36.                 <configuration>
  37.                     <descriptorRefs>
  38.                         <descriptorRef>jar-with-dependencies</descriptorRef>
  39.                     </descriptorRefs>
  40.                 </configuration>
  41.                 <executions>
  42.                     <execution>
  43.                         <id>make-assembly</id>
  44.                         <phase>package</phase>
  45.                         <goals>
  46.                             <goal>single</goal>
  47.                         </goals>
  48.                     </execution>
  49.                 </executions>
  50.             </plugin>
  51.         </plugins>
  52.     </build>
复制代码
5.添加log4j.properties

  1. log4j.rootLogger=info, stdout
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
  5. log4j.appender.logfile=org.apache.log4j.FileAppender
  6. log4j.appender.logfile.File=target/spring.log
  7. log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
复制代码
6.团体思绪梳理

Map阶段:

  • map()⽅法中把传⼊的数据转为String类型
  • 根据空格切分出单词
  • 输出<单词,1>
Reduce阶段:

  • 汇总各个key(单词)的个数,遍历value数据进⾏累加
  • 输出key的总数
Driver

  • 获取设置⽂件对象,获取job对象实例
  • 指定步伐jar的当地路径
  • 指定Mapper/Reducer类
  • 指定Mapper输出的kv数据类型
  • 指定终极输出的kv数据类型
  • 指定job处理的原始数据路径
  • 指定job输出效果路径
  • 提交作业
  • 编写Mapper类
7.示例一

7.1Map阶段

  1. package cn.bdqn;
  2. import org.apache.hadoop.io.IntWritable;
  3. import org.apache.hadoop.io.LongWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Mapper;
  6. import java.io.IOException;
  7. public class WordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
  8.     Text k = new Text();
  9.     IntWritable v = new IntWritable(1);
  10.     @Override
  11.     protected void map(LongWritable key, Text value, Context context) throws
  12.             IOException, InterruptedException {
  13.         // 1 获取一行
  14.         String line = value.toString();
  15.         // 2 切割
  16.         String[] words = line.split(" ");
  17.         // 3 输出
  18.         for (String word : words) {
  19.             k.set(word);
  20.             context.write(k, v);
  21.         }
  22.     }
  23. }
复制代码
7.2Reducer阶段

  1. package cn.bdqn;
  2. import org.apache.hadoop.io.IntWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Reducer;
  5. import java.io.IOException;
  6. public class WordcountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  7.     int sum;
  8.     IntWritable v = new IntWritable();
  9.     @Override
  10.     protected void reduce(Text key, Iterable<IntWritable> values, Context
  11.             context) throws IOException, InterruptedException {
  12.         // 1 累加求和
  13.         sum = 0;
  14.         for (IntWritable count : values) {
  15.             sum += count.get();
  16.         }
  17.         System.out.println();
  18.         // 2 输出
  19.         v.set(sum);
  20.         context.write(key, v);
  21.     }
  22. }
复制代码
7.3Driver阶段

  1. package cn.bdqn;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.Path;
  4. import org.apache.hadoop.io.IntWritable;
  5. import org.apache.hadoop.io.Text;
  6. import org.apache.hadoop.mapreduce.Job;
  7. import org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat;
  8. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  9. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  10. import java.io.IOException;
  11. public class WordcountDriver {
  12.     public static void main(String[] args) throws IOException,
  13.             ClassNotFoundException, InterruptedException {
  14.         // 1 获取配置信息以及封装任务
  15.         Configuration configuration = new Configuration();
  16.         Job job = Job.getInstance(configuration);
  17.         // 2 设置jar加载路径
  18.         job.setJarByClass(WordcountDriver.class);
  19.         // 3 设置map和reduce类
  20.         job.setMapperClass(WordcountMapper.class);
  21.         job.setReducerClass(WordcountReducer.class);
  22.         job.setCombinerClass(WordcountReducer.class);
  23.         // 4 设置map输出
  24.         job.setMapOutputKeyClass(Text.class);
  25.         job.setMapOutputValueClass(IntWritable.class);
  26.         // 5 设置最终输出kv类型
  27.         job.setOutputKeyClass(Text.class);
  28.         job.setOutputValueClass(IntWritable.class);
  29.         job.setInputFormatClass(CombineTextInputFormat.class);
  30.         // 6 设置输入和输出路径
  31.         FileInputFormat.setInputPaths(job, new Path(args[0]));
  32.         FileOutputFormat.setOutputPath(job, new Path(args[1]));
  33.         // 7 提交
  34.         boolean result = job.waitForCompletion(true);
  35.         System.exit(result ? 0 : 1);
  36.     }
  37. }
复制代码
8.示例二

8.1序列化

  1. package cn.bdqn.demo1;
  2. import org.apache.hadoop.io.Writable;
  3. import java.io.DataInput;
  4. import java.io.DataOutput;
  5. import java.io.IOException;
  6. // 1 实现writable接口
  7. public class SpeakBean implements Writable {
  8.     private long selfDuration;
  9.     private long thirdPartDuration;
  10.     private long sumDuration;
  11.     //2 反序列化时,需要反射调用空参构造函数,所以必须有
  12.     public SpeakBean() {
  13.     }
  14.     public SpeakBean(long selfDuration, long thirdPartDuration) {
  15.         this.selfDuration = selfDuration;
  16.         this.thirdPartDuration = thirdPartDuration;
  17.         this.sumDuration = this.selfDuration + this.thirdPartDuration;
  18.     }
  19.     //3 写序列化方法
  20.     public void write(DataOutput out) throws IOException {
  21.         out.writeLong(selfDuration);
  22.         out.writeLong(thirdPartDuration);
  23.         out.writeLong(sumDuration);
  24.     }
  25.     //4 反序列化方法
  26.     //5 反序列化方法读顺序必须和写序列化方法的写顺序必须一致
  27.     public void readFields(DataInput in) throws IOException {
  28.         this.selfDuration = in.readLong();
  29.         this.thirdPartDuration = in.readLong();
  30.         this.sumDuration = in.readLong();
  31.     }
  32.     // 6 编写toString方法,方便后续打印到文本
  33.     @Override
  34.     public String toString() {
  35.         return selfDuration +
  36.                 "\t" + thirdPartDuration +
  37.                 "\t" + sumDuration;
  38.     }
  39.     public long getSelfDuration() {
  40.         return selfDuration;
  41.     }
  42.     public void setSelfDuration(long selfDuration) {
  43.         this.selfDuration = selfDuration;
  44.     }
  45.     public long getThirdPartDuration() {
  46.         return thirdPartDuration;
  47.     }
  48.     public void setThirdPartDuration(long thirdPartDuration) {
  49.         this.thirdPartDuration = thirdPartDuration;
  50.     }
  51.     public long getSumDuration() {
  52.         return sumDuration;
  53.     }
  54.     public void setSumDuration(long sumDuration) {
  55.         this.sumDuration = sumDuration;
  56.     }
  57.     public void set(long selfDuration, long thirdPartDuration) {
  58.         this.selfDuration = selfDuration;
  59.         this.thirdPartDuration = thirdPartDuration;
  60.         this.sumDuration = this.selfDuration + this.thirdPartDuration;
  61.     }
  62. }
复制代码
8.1Map阶段

  1. package cn.bdqn.demo1;
  2. import org.apache.hadoop.io.LongWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Mapper;
  5. import java.io.IOException;
  6. public class SpeakDurationMapper extends Mapper<LongWritable, Text, Text,SpeakBean> {
  7.     SpeakBean v = new SpeakBean();
  8.     Text k = new Text();
  9.     @Override
  10.     protected void map(LongWritable key, Text value, Context context)
  11.             throws IOException, InterruptedException {
  12.         // 1 获取一行
  13.         String line = value.toString();
  14.         // 2 切割字段
  15.         String[] fields = line.split("\t");
  16.         // 3 封装对象
  17.         // 取出设备id
  18.         String deviceId = fields[1];
  19.         // 取出自有和第三方时长数据
  20.         long selfDuration = Long.parseLong(fields[fields.length - 3]);
  21.         long thirdPartDuration = Long.parseLong(fields[fields.length - 2]);
  22.         k.set(deviceId);
  23.         v.set(selfDuration, thirdPartDuration);
  24.         // 4 写出
  25.         context.write(k, v);
  26.     }
  27. }
复制代码
8.2Reducer阶段

  1. package cn.bdqn.demo1;
  2. import org.apache.hadoop.io.Text;
  3. import org.apache.hadoop.mapreduce.Reducer;
  4. import java.io.IOException;
  5. public class SpeakDurationReducer extends Reducer<Text, SpeakBean, Text, SpeakBean> {
  6.     @Override
  7.     protected void reduce(Text key, Iterable<SpeakBean> values, Context
  8.             context) throws IOException, InterruptedException {
  9.         long self_Duration = 0;
  10.         long thirdPart_Duration = 0;// 1 遍历所用bean,将其中的自有,第三方时长分别累加
  11.         for (SpeakBean sb : values) {
  12.             self_Duration += sb.getSelfDuration();
  13.             thirdPart_Duration += sb.getThirdPartDuration();
  14.         }
  15.         // 2 封装对象
  16.         SpeakBean resultBean = new SpeakBean(self_Duration,
  17.                 thirdPart_Duration);
  18.         // 3 写出
  19.         context.write(key, resultBean);
  20.     }
  21. }
复制代码
8.3Driver阶段

  1. package cn.bdqn.demo1;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.Path;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Job;
  6. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  7. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  8. import java.io.IOException;
  9. public class SpeakerDriver {
  10.     public static void main(String[] args) throws IllegalArgumentException,
  11.             IOException, ClassNotFoundException, InterruptedException {
  12.         // 输入输出路径需要根据自己电脑上实际的输入输出路径设置
  13.         //args = new String[]{"d:/input/input/speak.data", "d:/output222"};
  14.         // 1 获取配置信息,或者job对象实例
  15.         Configuration configuration = new Configuration();
  16.         Job job = Job.getInstance(configuration);
  17.         // 6 指定本程序的jar包所在的本地路径
  18.         job.setJarByClass(SpeakerDriver.class);
  19.         // 2 指定本业务job要使用的mapper/Reducer业务类
  20.         job.setMapperClass(SpeakDurationMapper.class);
  21.         job.setReducerClass(SpeakDurationReducer.class);
  22.         // 3 指定mapper输出数据的kv类型
  23.         job.setMapOutputKeyClass(Text.class);
  24.         job.setMapOutputValueClass(SpeakBean.class);
  25.         // 4 指定最终输出的数据的kv类型
  26.         job.setOutputKeyClass(Text.class);
  27.         job.setOutputValueClass(SpeakBean.class);
  28.         // 5 指定job的输入原始文件所在目录
  29.         FileInputFormat.setInputPaths(job, new Path(args[0]));
  30.         FileOutputFormat.setOutputPath(job, new Path(args[1]));
  31.         // 7 将job中配置的相关参数,以及job所用的java类所在的jar包, 提交给yarn去运行
  32.         boolean result = job.waitForCompletion(true);
  33.         System.exit(result ? 0 : 1);
  34.     }
  35. }
复制代码
七、打包上传

1.打包


2.效果


3.在Linux创建文件

4.hdfs命令

4.1帮助

  1. hadoop fs -help
复制代码
4.2创建目标目次

  1. hadoop fs -mkdir -p /user/root
复制代码
4.3上传

  1. hadoop fs -put a.txt /
复制代码

4.4删除空目次

  1. hadoop fs -rmdir /user/root
复制代码
4.5删除文件

  1. hadoop fs -rm -f /user/root/a.txt
复制代码

4.6实行代码

  1. hadoop jar jar文件 启动类 读取文件位置 输出文件位置
复制代码
示例
  1. hadoop jar Hadoop_Demo-1.0-SNAPSHOT.jar cn.bdqn.demo.WordcountDriver  /b.txt /out1
复制代码

  1. hadoop jar Hadoop_Demo-1.0-SNAPSHOT.jar cn.bdqn.demo1.SpeakerDriver  /a.txt /out
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表