Hadoop3.x伪分布式及Hbase搭建与单词统计项目构建

  • 2019 年 10 月 6 日
  • 筆記

Hadoop3.x伪分布式及Hbase搭建与单词统计项目构建

0.导语

本节从0开始一步步搭建伪分布式及Hbase等。同时学习使用Intellij Maven构建Map-Reduce项目进行单词统计

光城的运行环境为:Ubuntu 16.04。

1.准备工作

JAVA

Hadoop环境需要JAVA环境,所以首先得安装Java,而Ubuntu默认Java为OpenJdk,需要先卸载,再安装Oracle。除此之外,你也可以不用卸载OpenJDK,将Oracle JAVA设为默认的即可。光城的JAVA环境为1.8。

关于JAVA,大家可以到官网下载,这里给出现在地址,根据不同的系统选择版本!

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

关于java配置只要输入java或者javac看到输出,即可配置正确,记得配入Path中!

用户

在Ubuntu或者类Unix系统中,用户可以通过下列命令添加创建用户:

sudo useradd -s /bin/bash -g hadoop -d /home/hadoop -m hadoop  

如果提示hadoop不再sudoers文件中,执行下列命令:

vi /etc/sudoers  

编辑上述文件:

# User privilege specification  root    ALL=(ALL:ALL) ALL  hadoop    ALL=(ALL:ALL) ALL  # 添加此行  

再执行上述命令:

light@city:~$ sudo useradd -s /bin/bash -g hadoop -d /home/hadoop -m hadoop  useradd:“hadoop”组不存在  

添加用户组:

light@city:/home$ sudo groupadd hadoop  

再次执行即可:

light@city:~$ sudo useradd -s /bin/bash -g hadoop -d /home/hadoop -m hadoop  

设置或修改密码:

sudo passwd hadoop  

SSH

安装ssh

sudo apt-get install openssh-server  

配置免密登陆

su - hadoop  ssh-keygen -t rsa  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  chmod 0600 ~/.ssh/authorized_keys  

然后输入

ssh localhost  

此时不需要输入密码,说明成功!

2.伪分布式

Hadoop

  • 下载及安装

在下列镜像中下载Hadoop版本,我下载的3.0.2。大家可以自行选择版本!

https://mirrors.cnnic.cn/apache/hadoop/common/

wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.0.2/hadoop-3.0.2.tar.gz  tar zxvf hadoop-3.0.2.tar.gz  sudo mv hadoop-3.0.2 /usr/local/hadoop  
  • 配置

编辑etc/hadoop/core-site.xmlconfiguration配置为

<configuration>      <property>          <name>fs.defaultFS</name>          <value>hdfs://localhost:9000</value>      </property>  </configuration>  

重要点!一定要看本机的9000端口是否被占用,如果被占用了,后面就启动不出来NameNode!

关于查看本机的9000端口是否被占用:

sudo netstat -alnp | grep 9000

会发现9000端口被php-fpm给占用了,所以这里得修改为其他端口,比如我修改为9012,然后可以再次执行这个命令,会发现没被占用,说明可行!

编辑etc/hadoop/hdfs-site.xmlconfiguration配置为

<configuration>      <property>          <name>dfs.replication</name>          <value>1</value>      </property>  </configuration>  
  • 初始化

格式化HDFS

bin/hdfs namenode -format  

格式化执行一次即可!

启动NameNode和DataNode

sbin/start-dfs.sh  

这时在浏览器中访问http://localhost:9870/,可以看到NameNode相关信息。

http://localhost:9864/查看DataNode相关信息。

由于hadoop3.x版本与2.x版本监听端口不一样,所以如果还是原先的50070便访问不到相关信息,所以如果你不知道上述9870或者9864,没关系,可以通过下面命令查看!

输入netstat命令即可查看tcp监听端口:

sudo netstat -ntlp  

上述两个重要端口,9864后面可以看到进程ID为17270,通过JPS查看可以看到对应DataNode,9870类似方法,就不在多说了。

  • 配置YARN

编辑etc/hadoop/mapred-site.xmlconfiguration配置为

<configuration>      <property>          <name>mapreduce.framework.name</name>          <value>yarn</value>      </property>  </configuration>  

编辑etc/hadoop/yarn-site.xmlconfiguration配置为

<configuration>      <property>          <name>yarn.nodemanager.aux-services</name>          <value>mapreduce_shuffle</value>      </property>  </configuration>  
  • 启动YARN
sbin/start-yarn.sh  

查看进程:

Jps  NodeManager  SecondaryNameNode  NameNode  ResourceManager  DataNode  

没错,YARN就是上述的资源管理:ResourceManager。

同理,可以通过上述方法查看ResourceManager的端口,默认为8088。

浏览器输入:http://localhost:8088/cluster

  • 启动与停止

启动:

sbin/start-dfs.sh  sbin/start-yarn.sh  

停止:

sbin/stop-dfs.sh  sbin/stop-yarn.sh  

至此,伪分布式搭建完毕!后面开始HBase与Phoenix搭建!

HBase

  • 下载安装

https://mirrors.cnnic.cn/apache/hbase/

wget https://mirrors.cnnic.cn/apache/hbase/stable/hbase-1.4.9-bin.tar.gz  tar zxvf hbase-1.4.9-bin.tar.gz  sudo mv zxvf hbase-1.4.9-bin /usr/local/hbase  
  • 单机HBase配置

编辑conf/hbase-site.xmlconfiguration配置为

<configuration>    <property>      <name>hbase.rootdir</name>      <value>hdfs://localhost:9012/hbase</value>    </property>    <property>      <name>hbase.zookeeper.property.dataDir</name>      <value>/home/hadoop/zookeeper</value>    </property>  </configuration>  
  • 启动
bin/start-hbase.sh  

jps查看进程:

HMaster  Jps  
  • 终端
bin/hbase shell

如果想要关闭HBase,则输入:

bin/stop-hbase.sh  
  • HBase伪分布式配置

编辑conf/hbase-site.xmlconfiguration添加

<property>    <name>hbase.cluster.distributed</name>    <value>true</value>  </property>  

然后修改root由本地文件系统到HDFS,编辑conf/hbase-site.xmlhbase.rootdir值由

file:///home/hadoop/hbase  

修改为

hdfs://localhost:9012/hbase  

注意后面的端口号9012,需要保证与Hadoop DFS配置中的fs.defaultFS相同!

这样子修改后,会在hdfs文件系统中看到HBase目录,当然你也可以不用配置此项!

上述配置完毕后,保存后,重启HBase即可!

封装

每次启动这些输入太多命令,太繁琐,直接一个bash脚本搞定,首先进入/usr/local,然后再运行这个脚本!

启动脚本:

#!/bin/bash  hadoop/sbin/start-dfs.sh  hadoop/sbin/start-yarn.sh  hbase/bin/start-hbase.sh  

停止脚本:

#!/bin/bash  hadoop/sbin/stop-dfs.sh  hadoop/sbin/stop-yarn.sh  hbase/bin/stop-hbase.sh  

3.单词统计

环境

使用Intellij构建单词统计。

【新建maven项目】

启动Intellij,并新建项目选择Maven!

然后点击下一步,GroupId与ArtifactId随便填写,然后进入下一步,填写项目名字即可!

修改pom.xml

修改pom.xml如下:

<repositories>      <repository>          <id>apache</id>          <url>http://maven.apache.org</url>      </repository>  </repositories>    <dependencies>      <dependency>          <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-core</artifactId>          <version>1.2.1</version>      </dependency>      <dependency>          <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-common</artifactId>          <version>3.0.2</version>      </dependency>  </dependencies>  

根据自己的hadoop版本修改hadoop-common下面的版本号,其他的可以不用修改!然后放在pom.xml里面即可!

此时会看到Maven projects need to imported,选择Import Changes,稍等片刻,所有的包就被导入完毕。

java项目

src/main/java下面右键新建java class,填写类名为WordCount即可,然后输入下面代码:

import java.io.IOException;  import java.util.StringTokenizer;    import org.apache.hadoop.conf.Configuration;  import org.apache.hadoop.fs.Path;  import org.apache.hadoop.io.IntWritable;  import org.apache.hadoop.io.Text;  import org.apache.hadoop.mapreduce.Job;  import org.apache.hadoop.mapreduce.Mapper;  import org.apache.hadoop.mapreduce.Reducer;  import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;    public class WordCount {        public static class TokenizerMapper              extends Mapper<Object, Text, Text, IntWritable> {            private final static IntWritable one = new IntWritable(1);          private Text word = new Text();            public void map(Object key, Text value, Context context          ) throws IOException, InterruptedException {              StringTokenizer itr = new StringTokenizer(value.toString());              while (itr.hasMoreTokens()) {                  word.set(itr.nextToken());                  context.write(word, one);              }          }      }        public static class IntSumReducer              extends Reducer<Text, IntWritable, Text, IntWritable> {          private IntWritable result = new IntWritable();            public void reduce(Text key, Iterable<IntWritable> values,                             Context context          ) throws IOException, InterruptedException {              int sum = 0;              for (IntWritable val : values) {                  sum += val.get();              }              result.set(sum);              context.write(key, result);          }      }        public static void main(String[] args) throws Exception {          Configuration conf = new Configuration();          Job job = Job.getInstance(conf, "word count");          job.setJarByClass(WordCount.class);          job.setMapperClass(TokenizerMapper.class);          job.setCombinerClass(IntSumReducer.class);          job.setReducerClass(IntSumReducer.class);          job.setOutputKeyClass(Text.class);          job.setOutputValueClass(IntWritable.class);          FileInputFormat.addInputPath(job, new Path(args[0]));          FileOutputFormat.setOutputPath(job, new Path(args[1]));          System.exit(job.waitForCompletion(true) ? 0 : 1);      }  }  

输入

此时需要对单词统计项目导入数据,在src同级目录下,新建input文件夹,然后右键新建file,输入file.txt。里面输入下面内容:

love fate hehe  love 他 hehe  fate 他 hehe  love 我 hehe  hehe 哈哈 我 你 他 我  

这个就是单词统计的源数据!当然你也可以自己修改!

配置

然后点击菜单栏的Run,找到Edit Configurations,修改配置如下图:

最主要就是修改Program arguments内容填写为:input output,这会让项目从 input 目录读数据并将输出结果保存到output 目录!

注意:不要自己新建output!

然后运行WordCount.java,此时就会看到输出结果:

output文件夹下面的part-r-0000即可看到输出结果!