大数据之Hadoop伪分布式部署

  • A+
所属分类:Big Data

Apache Hadoop软件库是一个框架,允许使用简单的编程模型在大量计算机上对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,因此在一组计算机上提供高可用性服务,每个计算机都可能会出现故障。

一.安装环境

系统环境:Centos 7

软件版本:Hadoop 2.9.2

1.安装JDK

2.测试jdk

java -version

3.安装相关组件

yum install -y openssh-server rsync

4.查看安装版本

ssh -V;
rsync --version

5.设置开机启动

systemctl start sshd;
systemctl enable sshd;
systemctl start rsyncd; 
systemctl enable rsyncd

6.查看是否开机启动

systemctl list-unit-files |grep sshd; 
systemctl list-unit-files |grep rsyncd

7.启用公钥

sudo sed -i 's/#RSAAuthentication yes/RSAAuthentication yes/' /etc/ssh/sshd_config;
sudo sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config

8 .创建hadoop用户

useradd -m hadoop -s /bin/bash

9.为hadoop设置密码

passwd hadoop

10.hadoop无密码登录

su hadoop
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

11.查看配置文件

ls -l ~/.ssh/

12.导入公钥

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys;
chmod 600 ~/.ssh/authorized_keys;

13.测试SSH

ssh localhost

二.Hadoop(切换到root)

1.下载

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz

2.解压

tar zxvf hadoop-2.8.1.tar.gz;
mv hadoop-2.9.2 /opt/hadoop;
chown -R hadoop: /opt/hadoop;

4.查看版本

/opt/hadoop/bin/hadoop version

5.查看所有例子

/opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar

三.Hadoop单机配置(非分布式)

Hadoop 默认模式为非分布式模式,无需配置即可运行。非分布式即单 Java 进程,方便进行调试。 建立input,并把input文件夹中所有文件作为输入,查询dfs开头的,后面跟1个或1个以上的单词并统计出现的次数,然后输出到指定的output文件夹

cd /opt/hadoop/
mkdir input
cp etc/hadoop/*.xml input/
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'

查看结果

cat ./output/*

这里要说明一下Hadoop默认不会覆盖结果文件,如果再次运行上面实例会提示output文件夹已经存在,需要将output文件夹删除才能运行实例。

四.Hadoop伪分布式

Hadoop可以在单节点上以伪分布式模式运行,此时每一个Hadoop进程都作为一个独立的Java进程运行。

1.配置环境变量

sudo vim /etc/profile

# Set Hadoop Environment Variables 
export HADOOP_HOME=/opt/hadoop 
export HADOOP_INSTALL=$HADOOP_HOME 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME 
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

保存退出,执行下列命令

source /etc/profile

编辑配置文件hadoop-env.sh修改JAVA_HOME为绝对路径

vim /opt/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_144

这些环境变量在启动hadoop进程的时候需要,如若不配置可能报错。当然hadoop-env.sh这个文件也可以配置环境变量。

2.配置文件

Hadoop的配置文件位于/opt/hadoop/etc/hadoop中,伪分布式需要修改配置文件core-site.xml和hdfs-site.xml,若要启动YARN则还需修改配置文件mapred-site.xml和yarn-site.xmlYARN主要是为集群提供更好的资源管理和任务调度,在单机上提现不出价值,反而会影响程序运行速度,因此在单机上是否开启YARN就得看实际情况了。当然伪分布式不启动也可以,一般不会影响程序运行。

Hadoop的配置文件跟元素为configuration,一般只包含子元素property。每一个property元素就是一个配置项,配置文件不支持分层或分级,每个配置属性的名称name、值value和一个关于配置项的描述description;元素final和java关键字final类似,意味着这个配置项不可改变,而且在合并资源的时候可以防止配置项的值被覆盖。

3.编辑core-site.xml

vim /opt/hadoop/etc/hadoop/core-site.xml

<configuration> 
    <property> 
        <name>hadoop.tmp.dir</name> 
        <value>file:/opt/hadoop/tmp</value> 
    </property> 
    <property> 
        <name>fs.defaultFS</name> 
        <value>hdfs://localhost:9000</value> 
    </property> 
</configuration>

4.编辑hdfs-site.xml

vim hdfs-site.xml

<configuration> 
    <property> 
        <name>dfs.replication</name> 
        <value>1</value> 
    </property> 
    <property> 
        <name>dfs.namenode.name.dir</name> 
        <value>file:/opt/hadoop/tmp/dfs/name</value> 
    </property> 
    <property> 
        <name>dfs.datanode.data.dir</name> 
        <value>file:/opt/hadoop/tmp/dfs/data</value> 
    </property> 
</configuration>

5.编辑mapred-site.xml

cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

<configuration> 
    <property>  
        <name>mapreduce.framework.name</name> 
        <value>yarn</value> 
    </property> 
    <property> 
        <name>mapred.system.dir</name> 
        <value>file:/opt/hadoop/mapred/system</value> 
    </property> 
    <property> 
        <name>mapred.local.dir</name> 
        <value>file:/opt/hadoop/mapred/local</value> 
    </property> 
</configuration>

6.编辑yarn-site.xml

vim yarn-site.xml

<configuration> 
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
    <property> 
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 
        <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
    </property> 
</configuration>

7.测试配置是否正常,

hdfs namenode -format

大数据之Hadoop伪分布式部署

 8.启动服务

启动MapReduce

/opt/hadoop/sbin/start-dfs.sh

启动YARN

/opt/hadoop/sbin/start-yarn.sh

也可用start-all.sh直接把这两个服务启动起来

/opt/hadoop/sbin/start-all.sh

大数据之Hadoop伪分布式部署启动完成后用jps测试

9.需开启历史服务器,才能在web查看任务运行情况

/opt/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver

若出现一下提示

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable,

该WARN提示可以忽略,不影响正常使用,当然该提示可通过编译源码解决。如若还有其他报错,可通过查看日志排查原因

10.添加防火墙策略

sudo firewall-cmd --permanent --zone=public --add-port=50070/tcp;
sudo firewall-cmd --permanent --zone=public --add-port=8088/tcp;
sudo firewall-cmd --reload;

11.访问web界面 http://localhost:50070  大数据之Hadoop伪分布式部署访问YARN http://localhost:8088/cluster 大数据之Hadoop伪分布式部署 五.伪分布式实例

上面的单机模式,grep例子读取的是本地数据,伪分布式读取的则是HDFS上的数据,要使用HDFS,需先在HDFS中创建用户目录

复制xml到分布式文件系统中

hdfs dfs -mkdir -p /user/hadoop/input
hdfs dfs -put /opt/hadoop/etc/hadoop/*.xml /user/hadoop/input

查看HDFS中文件列表

hdfs dfs -ls /user/hadoop/input

伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件.

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

查看HDFS中的输出结果

hdfs dfs -cat output/*

#删除之前创建的output

rm -rf /opt/hadoop/output

HDFS中的输出结果拷贝到本地

hdfs dfs -get output /opt/hadoop/output

提示:Hadoop运行程序时,输出目录不能存在,否则会提示错误

"org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists"

因此再次执行,需删除output文件夹

hdfs dfs -rm -r output

注:本文部分内容转自给力星官方安装说明

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: