伪集群模式

Reads: 825 Edit

搭建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

安装成功后,会出现如下信息:

big-38

下载安装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

安装成功后,会出现如下信息:

big-39

修改配置文件

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

启动成功后,会显示如下进程

big-45

启动成功后,可以在主系统的浏览器中输入 http://192.168.72.141:50070 查看管理页面(注意需要换成自己虚拟机的ip地址)。

big-46

结束进程

$ 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的内容如下:

big41

**与单机模式不同,在伪集群模式下,数据文件需要首先对应成分布式文件,然后再运行单词统计任务,分布式文件系统有自己的操作命令,一般以hdfs dfs开头。 **

创建分布式文件系统的用户

$ hdfs dfs -mkdir -p /user/chuishuju

创建好后,可以使用以下命令查看用户目录(也可以通过web管理页面查看)。

$ hdfs dfs -ls /

big-47

为chuishuju用户创建分布式文件存放目录

$ hdfs dfs -mkdir input

将原始文件song.txt 上传到分布式文件系统

$ hdfs dfs -put /usr/local/hadoop-3.3.4/wcinput/song.txt input

查看上传的分布式文件

$ hdfs dfs -ls -R /  

big-48

运行字数统计程序

$ 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

big-49

再次查看分布式文件

$ hdfs dfs -ls -R / 

big-50

如果需要再次运行程序,需要把output文件删除,或者起一个新的输出文件夹名,否则会报错!

$ hdfs dfs -rm -r output

获取案例软件和数据,请关注微信公众号并回复:big_dt2


Comments

Make a comment