文章目录
  1. 1. 之前遇到的问题
  2. 2. 伪分布式模式配置
  3. 3. 启动
  4. 4. 伪分布式模式测试
  5. 5. WordCount测试
  6. 6. 下一步的工作

本文承接上文,Linux Ubuntu 16.04安装Hadoop全过程(一),前文实践了单机模式的配置,此文实现伪分布式模式的配置(非YARN)。

之前遇到的问题

先说一下遇到的一个问题。

1.之前添加hadoop用户失败了,/home目录下没有hadoop目录,但是由于并没用到hadoop而是继续用自己的账户,所以没有发觉,后来转换到hadoop去登录,输入正确的账号密码后,黑下屏马上就回到了原来登录前的界面,也就是出现了循环登录的问题,查看了网上的一些解决方案,大致是要需要找到/home/user(user指的是用户名)下的.xsession-errors文件,但是此时问题来了,突然发现/home下没有hadoop目录,所以找到解决方法。一个原因是添加用户的姿势不对,Linux各发行版会有差异,比如上篇文章那样添加则可以成功,这个问题需要好好研究一下。
hadoop-9

伪分布式模式配置

上一篇文章讲述了在Ubuntu下安装Hadoop的过程,以及单机模式的配置和测试,最终测试成功。

上篇文章的配置沿用下来,再修改两个文件:
1./usr/local/hadoop/etc/hadoop/core-site.xml

原本此文件中只有如下内容:

1
2
<configuration>
</configuration>

添加内容使成为:

1
2
3
4
5
6
7
8
9
10
11
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

2./usr/local/hadoop/etc/hadoop/hdfs-site.xml

原本也是空的,添加内容使成为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>

即可。

注意,如果要变回单机模式,清空<configuration>标签中的内容即可。
且如果不是以YARN模式启动的话,无需配置mapred-site.xml。

启动

1.格式化namenode
在/usr/local/hadoop下以用户hadoop的身份执行:

1
$ ./bin/hdfs namenode -format

hadoop-7
看到如上的提示说明格式化namenode成功了。

2.启动服务
如上,执行

1
$ ./sbin/start-dfs.sh

可看到:
hadoop-7

然后用jps命令来判断是否启动成功,结果只显示:

1
2
hadoop@ubuntu:/usr/local/hadoop$ jps
3757 Jps

没有Datanode和Namenode,说明配置不成功。
针对这种情况,依次运行如下命令,最后启动成功:

1
2
3
4
$ ./sbin/stop-dfs.sh    # 关闭dfs
$ rm -r ./tmp # 删除 tmp 文件,注意这会删除 HDFS 中原有的所有数据
$ ./bin/hdfs namenode -format # 重新格式化 NameNode
$ ./sbin/start-dfs.sh # 重启dfs

hadoop-11

3.注: jps命令’command not found’的错误解决:
jps命令是jdk自带的,找不到命令说明极有可能是环境变量出了问题,用echo $PATH查看环境变量,果然什么都没有,说明.bashrc中可能没有配置,果然发现,之前配置的.bashrc是root用户的配置文件,在hadoop用户的根目录还需要配置一遍。即打开.bashrc文件,在最后加入如下几行:

1
2
3
4
export JAVA_HOME=/usr/jdk/jdk1.8.0_101
export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

然后source .bashrc保存即可。
此时jps命令启动正常。

4.启动成功后可打开http://localhost:50070查看namenode和datanode或者DFS的信息。
hadoop-12

伪分布式模式测试

单机模式直接读取的是本地文件,如input目录和output目录,而伪分布式模式需要读取分布式文件系统HDFS中的文件,所以还得先建立HDFS。

1
2
3
$ ./bin/hdfs dfs -mkdir -p /user/hadoop  # 在HDFS中创建用户目录
$ ./bin/hdfs dfs -mkdir input # 在用户目录下创建input目录
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input # 将一些测试文件移入input目录,就移配置xml文件作为输入

注意,我们创建了/user/hadoop用户目录,又使用的是hadoop用户,所以直接用相对路径input即可表示/user/hadoop/input。

然后执行一个筛出dfs开头的单词的程序:
其中./bin/hadoop jar向集群提交作业
grep是Hadoop提供的一个示例程序。
hadoop提供的示例程序如下:(0.19版本)
hadoop-17

1
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

hadoop-13

然后查看输出,此时输出仍在HDFS中。

1
$ ./bin/hdfs dfs -cat output/*

hadoop-14

可以将HDFS中的文件拷到本地

1
$ ./bin/hdfs dfs -get output ./output

hadoop-15
注意第二次运行的时候需要删除HDFS中的output,否则会报错,因为此中有防止覆盖的机制,不会让你在不知情的情况下就覆盖掉上一个output,所以需要移走或者删除上一个output。
最后所有程序运行结束后运行./sbin/stop-dfs.sh停止守护进程即可。

WordCount测试

下面还是进行一下WordCount单词统计程序的测试。
先删除HDFS中的output目录:

1
$ ./bin/hdfs dfs -rm -r output

然后如同单机模式中运行WordCount程序一样,运行:

1
$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.3-sources.jar org.apache.hadoop.examples.WordCount input output

最后查看结果如下:
hadoop-16
移入的几个xml中(并非全部),总共有302个“单词”,每个单词的词频统计都在文件中汇总。

至此运行成功,伪分布式系统配置完毕。

下一步的工作

1.探索YARN模式
2.MapReduce程序的设计与实现(WordCount)

大数据系统与技术 | Big Data