搭建hadoop伪群模式
安装配置SSH
安装ssh
$ sudo apt install openssh-server
ssh登录(此时,ssh登录需要输入密码)
$ ssh localhost
退出ssh登录(由于是本地登录,所以登录后主机名一样;需要通过exit命令退出)。
$ exit
配置ssh无密码登陆
生成公钥与私钥(注意三次提示都直接按回车)。
$ ssh-keygen -t rsa
切换到".ssh"隐藏目录
cd ~/.ssh
将密钥加入到授权中
$ cat ./id_rsa.pub >> ./authorized_keys
ssh登录(此时,ssh登录不需要密码)。
$ ssh localhost
退出ssh登录
$ exit
下载安装jdk(目前hadoop3只支持java8)
JDK安装包可以从oracle官网(https://www.oracle.com/java/technologies/downloads/ )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。
sudo tar -xzvf jdk-8u202-linux-x64.tar.gz -C /usr/local
配置jdk环境变量
打开~/.bashrc文件
$ sudo vim ~/.bashrc
然后在文件末尾加入以下代码,保存退出。
export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效
$ source ~/.bashrc
查看java版本
$ java -version
安装成功后,会出现如下信息:
下载安装hadoop
Hadoop安装包可以从hadoop官网(https://hadoop.apache.org )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。注意解压后赋予hadoop目录777权限,否则运行hadoop任务时会出现权限不足问题。
$ sudo mv hadoop-3.3.4.tar.gz /usr/local
$ cd /usr/local
$ sudo tar -xzvf hadoop-3.3.4.tar.gz
$ sudo chmod -R 777 hadoop-3.3.4
配置hadoop环境变量(可以在bashrc或profile文件中添加)
打开~/.bashrc文件
$ sudo vim ~/.bashrc
然后在文件末尾加入以下代码,保存退出。
export HADOOP_HOME=/usr/local/hadoop-3.3.4
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export PATH=${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin:$PATH
使环境变量生效
$ source ~/.bashrc
查看Hadoop版本信息
$ hadoop version
安装成功后,会出现如下信息:
修改配置文件
Hadoop 可以在单节点上以伪分布式的方式运行,该模式下需要对core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和hadoop-env.sh五个配置文件进行修改,且使用HDFS分布式件。配置文件的位于hadoop安装目录下的etc/hadoop/ 中。
切换到hadoop安装目录:
$ cd /usr/local/hadoop-3.3.4/
core-site.xml文件
打开core-site.xml,
$ sudo vim etc/hadoop/core-site.xml
定位到以下部分:
<configuration>
</configuration>
在其中添加如下代码,指定运行时产生的临时文件存放位置,以及namenode的地址。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-3.3.4/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml文件
打开 hdfs-site.xml,
$ sudo vim etc/hadoop/hdfs-site.xml
定位到以下部分:
<configuration>
</configuration>
在其中添加如下代码。其中dfs.replication是配置分布式文件的副本数量,这里伪集群模式只有一个主机,所以设为1;dfs.namenode.name.dir和dfs.datanode.data.dir是配置nameNode和dataNode数据存放位置;dfs.http.address设置为本机的ip地址(本机ip地址可以通过ifconfig命令查看),以实现外网访问本机的50070端口(外部访问虚拟机)。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop-3.3.4/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop-3.3.4/tmp/dfs/data</value>
</property>
<property>
<name>dfs.http.address</name>
<value>192.168.72.141:50070</value>
</property>
</configuration>
mapred-site.xml文件
打开mapred-site.xml,
$ sudo vim etc/hadoop/mapred-site.xml
定位到以下部分:
<configuration>
</configuration>
在其中添加如下代码。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml文件
打开yarn-site.xml,
$ sudo vim etc/hadoop/yarn-site.xml
定位到以下部分:
<configuration>
</configuration>
在其中添加如下代码
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/usr/local/hadoop-3.3.4/etc/hadoop:/usr/local/hadoop-3.3.4/share/hadoop/common/lib/*:/usr/local/hadoop-3.3.4/share/hadoop/common/*:/usr/local/hadoop-3.3.4/share/hadoop/hdfs:/usr/local/hadoop-3.3.4/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.3.4/share/hadoop/hdfs/*:/usr/local/hadoop-3.3.4/share/hadoop/mapreduce/*:/usr/local/hadoop-3.3.4/share/hadoop/yarn:/usr/local/hadoop-3.3.4/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.3.4/share/hadoop/yarn/*</value>
</property>
</configuration>
hadoop-env.sh
打开hadoop-env.sh文件
$ sudo vim etc/hadoop/hadoop-env.sh
在文件末位添加JAVA的路径
export JAVA_HOME=/usr/local/jdk1.8.0_202
格式化与启动
格式化namenode
$ sudo hdfs namenode -format
启动进程
$ sudo start-all.sh
查看进程
$ jps
启动成功后,会显示如下进程
启动成功后,可以在主系统的浏览器中输入 http://192.168.72.141:50070 查看管理页面(注意需要换成自己虚拟机的ip地址)。
结束进程
$ stop-all.sh
hadoop伪群模式应用
hadoop程序的./share/hadoop/mapreduce目录下存放了hadoop自带的java应用程序包,这里介绍下hadoop-mapreduce-examples-3.3.4.jar的应用。
字数统计
切换到hadoop目录
$ cd /usr/local/hadoop-3.3.4
创建input目录
$ sudo mkdir wcinput
将“song.txt”文件通过WinSCP上传到虚拟机的Ubuntu系统,并移动到wcinpu目录下。
$ sudo mv song.txt /usr/local/hadoop-3.3.4/wcinput/
song.txt的内容如下:
**与单机模式不同,在伪集群模式下,数据文件需要首先对应成分布式文件,然后再运行单词统计任务,分布式文件系统有自己的操作命令,一般以hdfs dfs
开头。 **
创建分布式文件系统的用户
$ hdfs dfs -mkdir -p /user/chuishuju
创建好后,可以使用以下命令查看用户目录(也可以通过web管理页面查看)。
$ hdfs dfs -ls /
为chuishuju用户创建分布式文件存放目录
$ hdfs dfs -mkdir input
将原始文件song.txt 上传到分布式文件系统
$ hdfs dfs -put /usr/local/hadoop-3.3.4/wcinput/song.txt input
查看上传的分布式文件
$ hdfs dfs -ls -R /
运行字数统计程序
$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount input output
运行完成后,会在分布式文件系统中创建output文件下,part-r-00000文件存储了统计结果。
查看统计结果
$ hdfs dfs -cat output/part-r-00000
再次查看分布式文件
$ hdfs dfs -ls -R /
如果需要再次运行程序,需要把output文件删除,或者起一个新的输出文件夹名,否则会报错!
$ hdfs dfs -rm -r output