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.xml
,configuration
配置为
<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.xml
,configuration
配置为
<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.xml
,configuration
配置为
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
编辑etc/hadoop/yarn-site.xml
,configuration
配置为
<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.xml
,configuration
配置为
<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.xml
,configuration
中添加
<property> <name>hbase.cluster.distributed</name> <value>true</value> </property>
然后修改root由本地文件系统到HDFS,编辑conf/hbase-site.xml
,hbase.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
即可看到输出结果!
