实验题目:Hadoop单机伪分布式环境搭建及WordCount程序测试
实验硬件环境:
Intel i5-8250u 1.6GHz
RAM 8GB ddr4
软件环境:
Ubuntu 18.04.1LTS,IDEA,Hadoop 2.7.7
实验步骤:
1、创建hadoop用户(下面的操作均在hadoop用户下完成)
useradd hadoop -s /bin/hash #创建用户名为hadoop的用户
passwd hadoop #设置hadoop用户的密码
adduser hadoop sudo #可选,为了方便后面在hadoop用户下的 环境配置
2、安装SSH并配置无密码登录
sudo apt-get install openssh-server
安装成功后,运行下列命令完成配置无密码登录
ssh localhost #登录ssh,要求输入当前用户的密码
exit #退出登录
cd ~/.ssh/ #进入.ssh目录
ssh-keygen -t rsa #生成秘钥
cat ./id_rsa.put >> ./authorized_keys#加入授权
完成配置,在尝试登录ssh可以直接免密登录
3、安装JDK
在bashrc文件中添加JDK安装路径
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.2
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
完成后使bashrc生效
source ~/.bashrc
java -version #查看java版本
图片描述
4、安装Hadoop 2.7.7
从官网下载Hadoop2.7.7(不建议用Hadoop 3.*版本,问题多且论坛解决办法少)
将Hadoop文件解压至/usr/local/hadoop下,配置Hadoop路径
#bashrc后添加如下三行内容
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
#使bashrc生效
source ~/.bashrc
hadoop -version #查看hadoop是否安装成功
图片描述
5、修改配置文件
(1)修改hadoop-env.sh(/usr/local/hadoop/etc/hadoop/)
主要更改JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.2
(有的配置文件是$export JAVA_HOME=${JAVA_HOME}),可不更改
(2)修改core-site.xml(/usr/local/hadoop/etc/hadoop/)
<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>
(3)修改hdfs-site.xml(/usr/local/hadoop/etc/hadoop/)
<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>
(4)配置完成,格式化Namenode
cd /usr/local/hadoop/bin
./hdfs namenode -format
看到 Storage directory ××× has been successfully formatted.
和 Exiting with status 0
表示格式化正确
(5)开启守护进程
/usr/local/hadoop/sbin/start-dfs.sh #启动
/usr/local/hadoop/sbin/stop-dfs.sh #关闭
启动完成通过jps查看java进程的状态
图片描述
至此,单机伪分布式集群配置完毕
5、在IDEA上编写并运行MapReduce程序
(1)创建一个Maven项目
(2)在新项目中,依次选择File->Project Structure,在新窗口中选择Project Setting下的Modules,添加一个Module,名称随机。在右侧窗口中选择Dependencies页面,添加JARs or directories,添加的文件主要包括/usr/local/hadoop/share/hadoop/common,
/usr/local/hadoop/share/hadoop/common/lib,
/usr/local/hadoop/share/hadoop/hdfs,
/usr/local/hadoop/share/hadoop/hdfs/lib,
/usr/local/hadoop/share/hadoop/mapreduce,
/usr/local/hadoop/share/hadoop/mapreduce/lib,
/usr/local/hadoop/share/hadoop/tools/lib,
/usr/local/hadoop/share/hadoop/yar/lib下的jar包(建议全部添加)
6、编写MapReduce程序
7、单机运行MapReduce程序
(1)依次点击Run->Edit Configuration,增加一个Application的配置,名称随意,MainClass为MapReduce的主程序,Program arguments为运行程序所需要的参数也就是程序的input目录和output目录
(2)点击运行即可在单机情况下运行MapReduce程序(在该项目的根目录下会由程序自己创建output文件夹,不需要提前创建,否则会出错)
对”The Story of My Life by Helen Keller.txt”进行WordCount部分结果显示
图片描述
8、利用伪分布式集群运行MapReduce程序
(1)利用IDEA生成jar包
依次点击File->Project Structure,选择Project Setting 下的Artifacts,添加一个JAR。点击OK。
主界面依次点击就Build->Build Artifacts->Build,IDEA将在根目录下生成一个out文件夹,在/out/artifacts/WordCount中为打包好的jar包。
(2)将数据文件上传到HDFS
首先接触HDFS的安全模式
hdfs dfsadmin -safemode leave
查看/user目录下的文件
hdfs dfs -ls /user
#如果提示没有该文件夹可以自己创建
hdfs dfs -mkdir /user
利用-put命令将本地数据文件上传到HDFS
hdfs dfs -mkdir /user/hadoop
hdfs dfs -mkdir /user/hadoop/input#创建input目录
hdfs dfs -put /本地文件路径 /user/input #上传文件
将IDEA产生的jar包copy到hadoop目录下,利用hadoop运行该jar包
hadoop jar WordCount.jar WordCount input output
运行结束,HDFS产生/user/hadoop/output目录,存放程序运行状态和结果
hdfs dfs -ls /user/hadoop/output
图片描述
利用HDFS指令 -copyToLocal可以下载part-r-00000文件查看程序运行结果。
参考文档:
hadoop搭建具体步骤——第一章(伪分布式)[https://zhuanlan.zhihu.com/p/…]
SSH配置免密码登录后,仍需要输入密码——解决方案[https://blog.csdn.net/xiaoyi3…]
《深入理解大数据——大数据处理与编程实践》