Hadoop安装与使用

创建Hadoop用户

  • 创建hadoop用户可以使不同用户之间有明确的权限区别,同时也可以使针对Hadoop用户的配置操作不影响其他用户的使用
  • 创建用户命令如下:
    sudo useradd -m hadoop -s /bin/bash
  • 设置用户密码,方便记忆可以设为hadoop
    sudo passwd hadoop
  • 然后为hadoop用户增加管理员权限,方便部署
    sudo adduser hadoop sudo

更新apt和安装Vim编辑器

  • 用hadoop用户登录Ubuntu操作系统后,需要更新apt,确保后面顺利安装一些软件
    sudo apt-get install vim
    在需要确认处输入y即可

安装SSH和配置SSH无密码登录

  • 对于Hadoop伪分布式和完全分布式而言,需要启动集群中所有机器的Hadoop守护进程,这个过程可以通过SSH登录来实现
  • Ubuntu系统默认安装了SSH服务器和客户端,这里只需要安装SSH服务端,命令如下:
    sudo apt-get install openssh-server
    安装以后,可以使用如下命令登录本机
    ssh localhost
  • 出现提示后输入”yes”,并输入密码就可以登录本机了,但每次登录都需要输入密码,因此我们需要配置成SSH无密码登录
  • 退出刚才SSH登录,利用ssh-keygen生成密钥,并将密钥加入授权,具体命令如下
# 退出
$exit
# 进入.ssh目录
$cd ~/.ssh/
# 生成密钥
$ssh-keygen -t rsa
  • 生成一对密钥,使用rsa通用密钥算法,这时需要有三次回车

    5.生成后文件介绍
    这时出现几个文件,id_rsa.pub(publilc)公钥,id_rsa私钥,known_hosts是上几步输入ssh 192.168.41.102 产生的文件;
known_hosts	记录ssh访问过计算机的公钥(public key)
id_rsa	生成的私钥
id_rsa.pub	生成的公钥
authorized_keys	存放授权过的无密登录服务器公钥(后面会提到)

  • cat查看id_rsa.pub文件
    cat id_rsa.pub
  • 向自己发送公钥
    ssh-copy-id ...
    输入密码
  • 查看authorized_keys
    这时生成了 authorized_keys 文件,文件与id_rsa.pub内容相同
  • 退出ssh登录
    exit
  • 再次登录
    ssh ip
    此时再用ssh localhost命令,无需输入密码就可以直接登录

安装Java环境

  • hadoop本事使用java编写,因此Hadoop的开发和运行都需要Java的支持,对于Hadoop3.1.3而言,其要求使用JDK1.8安装包
  • 下载JDK安装文件(jdk-8u162-linux-x64.tar.gz),并且保存到”/home/hadoop/Downloads”目录下
    (链接:https://pan.baidu.com/s/1lKmjIaVNQQwjxEU6WQsO7w?pwd=gtin 提取码:gtin)
  • 执行如下命令创建”/usr/lib/jvm”目录来存放JDK文件
$cd /usr/lib
# 创建目录存放jvm文件
$sudo mkdir jvm /usr/lib/jvm
$cd ~ # 进入hadoop用户的主目录
$cd Downloads
$sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm
# 下面继续执行如下命令,设置环境变量:
$vim /etc/profile
# 在该文件的开头位置添加如下内容
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 保存 退出
:wq
# 输入如下指令使.bashrc生效
$source ~/.bashrc
#这是可以查看java是否安装成功
$java -version
  • 出现如下信息,则说明安装成功

安装单机Hadoop

# 解压
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local
# 进入
cd /usr/local/hadoop-3.1.3
# 查看Hadoop安装路径 
pwd
# 打开/etc/profile.d/my_env.sh文件添加环境变量
sudo vim /etc/profile
# 输入并保存下列内容
#HADOOP_HOME 
export HADOOP_HOME=/opt/module/hadoop-3.1.3 
export PATH=$PATH:$HADOOP_HOME/bin 
export PATH=$PATH:$HADOOP_HOME/sbin 
# 保存退出
:wq
# 让文件生效
source /etc/profile
# 查看安装是否成功
hadoop version

Hadoop伪分布式安装

  • 配置文件,位置在第二个hadoop下
    修改core-site.xml
cd /usr/local/hadoop-3.1.3/etc/hadoop
vim core-site.xml

将配置修改为如下内容

<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>
  • 修改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:/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>
  • 配置完后需要初始化文件系统
cd /usr/local/hadoop
./bin/hdfs namenode -format
  • 初始化后,使用下列命令启动 HDFS
./bin/start-dfs.sh

这里说一下我遇到的问题:
1.报“ERROR: Attempting to operate on yarn resourcemanager as root”的错误。
在~/.bashrc写入下面内容,更新source ~/.bashrc

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

2.Permission denied (publickey,passwd),公钥密码问题,前面设置了免密码登录,这里还是有问题,之前是在进入系统后操作ssh,现在在root我又再操作了一次ssh免密码登录,并成功后,在执行启动HDFS命令,又报JDK找不到,上面是在~/.bashrc里配置jdk的,可以在重复此操作并更新,或者将java和hadoop的环境配置都写在/etc/profile,更新文件也行;(上述两种文件挑一种写就行)

  • 输入jps查看是否启动成功HDFS

    此时可以访问网页(localhost:9870)

  • 接下来在HDFS的”/usr/hadoop”目录下创建input目录,命令如下:

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop
  • 然后在”/user/hadoop”目录下创建hadoop目录,命令如下
./bin/hdfs dfs -mkdir input

如果报错,则在input前面加-p

  • 接下来可以执行如下命令实现文件”上传”(伪分布式下,/etc/hadoop和HDFS的/user/hadoop/input目录在同一台一机器上,不需要通过网络传输数据)
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
  • 接着,运行如下命令执行测试样例程序Grep
./bin/hadoop jar /usr/local/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input ./output 'dfs[a-z.]+'
  • 输入如下指令查看最终结果
./bin/hdfs dfs -cat output/*

  • 删除output目录
./bin/hdfs dfs -rm -r output
  • 需要停止运行HDFS可执行如下命令
cd /usr/local/hadoop
./bin/stop-dfs.sh