hadoop基本运行与源码编译

引言:

hadoop的基本使用与源码编译

Hadoop启动及其基本操作

前置需求

  1. JDK(官方要求不同版本使用不同的JDK,由于我们使用2.10.0版本hadoop,必须使用JDK7及以上,JDK太高又会有warning,使用JDK8是最好的选择)
  2. ssh及pdsh管理ssh资源
1
2
3
4
rpm -qa|grep -E "openssh"
# 检查是否安装ssh
echo $JAVA_HOME
# 查看javahome路径
  1. 下载Hadoop。官网链接,千万注意,下hadoop-2.10.0-src.tar.gz,别下成原码了!!

安装Hadoop及实现伪分布式配置

  1. 官网链接:详细配置及参考

  2. 将下载的Hadoop压缩包随意的解压在一个包内img

    这就是解压后的文件

  3. 进入etc目录下,配置hadoop-env.sh

    1
    2
    3
    # The java implementation to use.
    export JAVA_HOME=[配置到JAVA_HOME]
    # 使用 echo $JAVA_HOME 查看JAVA_HOME路径
  4. 配置core-site.xmlhdfs-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # core-site.xml
    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    </property>
    </configuration>

    --------------------------------

    # hdfs-site.xml
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    </configuration>

    官网配置了这些就可以启动了,下面是百度到的其他配置,便于学习

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <!--core-site.xml-->
    <configuration>
    <!-- 指定HDFS的nameservice -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://zachary-pc:9000</value>
    </property>
    <!-- 缓冲区大小 -->
    <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
    </property>
    <!-- 指定临时文件目录 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/zachary/hadoop-2.10.0/tmp</value>
    </property>
    </configuration>


    -------------------
    <!--hdfs-site.xml-->
    <configuration>
    <!-- configuration for NameNode:-->
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/zachary/hadoop-2.10.0/name</value>
    </property>
    <!-- 块大小 -->
    <property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
    </property>
    <property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>
    </property>
    <!-- configuration for DateNode:-->
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/zachary/hadoop-2.10.0/data</value>
    </property>
    <!-- 指定HDFS副本的数量 -->
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    </configuration>

    ------------
    <!--mapred-site.xml-->
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>

    ------------
    <!--mapred-site.xml-->
    <configuration>
    <!-- Site specific YARN configuration properties -->
    <!-- configuration for ResourceManger: -->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>zahcary-pc</value>
    </property>
    <!-- configuration of NodeManager: reducer获取数据方式 -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <!-- 配置外网只需要替换外网ip为真实ip,否则默认为 localhost:8088 -->
    <!-- <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>外网ip:8088</value>
    </property> -->
    </configuration>

  5. 配置SSH免密登录

    在hadoop根目录下,输入

    1
    2
    3
    4
    # 生成公钥和秘钥,他们生成后是家目录(~)下的id_rsa和id_rsa.pub前者为私钥,后者为公钥
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 0600 ~/.ssh/authorized_keys
  6. 格式化namenode

    1
    bin/hdfs namenode -format
  7. 启动守护程序

    1
    sbin/start-dfs.sh
  8. 启动hadoop,在sbin目录下

    1
    2
    3
    4
    ./start-all.sh
    # 启动
    ./stop-all.sh
    # 关闭
  9. 输入jsp,如果有6个进程出现,说明启动成功

  10. 访问端口50070就是HDFS管理界面

    image-20200703103649720

    查看端口8088,结点管理页面

    image-20200703103826728

Hadoop命令行基本的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
bin/hdfs dfs -mkdir /user/t
# 创建指定目录

hadoop fs –rmr /user/t
# 删除指定的文件夹

hadoop fs -touchz /user/new.txt
# 在hadoop指定目录下新建空文件

hadoop dfs –ls [文件目录]
# 查看

hadoop fs –put [本地地址] [hadoop目录]
hadoop fs –put /home/t/file.txt /user/t
# 上传本地文件

hadoop fs –put [本地目录] [hadoop目录]
hadoop fs –put /home/t/dir_name /user/t
# 上传本地文件夹(dir_name是文件夹名)

hadoop fs -get [文件目录] [本地目录]
hadoop fs –get /user/t/ok.txt /home/t
# 将hadoop上某个文件down至本地已有目录下

hadoop fs –rm [文件地址]
hadoop fs –rm /user/t/ok.txt
# 删除hadoop上指定文件

hadoop fs –rm [目录地址]
hadoop fs –rmr /user/t
# 删除hadoop上指定文件夹(包含子目录等)

hadoop fs –mv /user/test.txt /user/ok.txt
# 将hadoop上某个文件重命名(将test.txt重命名为ok.txt)

hadoop job –kill [job-id]
# 将正在运行的hadoop作业kill

Hadoop 源码编译

环境要求

  • 要求apache-ant
  • 要求jdk1.7(亲自尝试,jdk1.8在最后会报出一大片红色Error)
  • 要求maven(maven要求在3.3.0以上,最好选择最新版本的maven)
  • 要求剩余磁盘大于两个G(df -h查看剩余磁盘容量)
  • 编译hadoop-2.10.0-src.tar.gz

编译过程

Maven配置

  1. 解压软件到一个位置。
  2. /etc/profile中配置环境路径
  3. 使用mvn -version查看版本信息

Tips:如果下载太慢的话,可以中断后,执行mvn -clean然后换成阿里的镜像,重新下载

ANT配置

  1. 同Maven的安装的配置,解压缩
  2. /etc/profile中配置环境路径
  3. 使用ant -version查看版本信息

安装glibc-headersg++

1
2
3
4
5
6
7
8
sudo yum install glibc-headers
# 安装glibc-headers
sudo yum install gcc-c++
# 安装g++
sudo yum install make
# 安装make
sudo yum install cmake
# 安装cmake

安装配置protobuf

  1. 解压文件
  2. 进入到protobuf-2.5.0目录下
  3. ./configure命令
  4. make命令
  5. make check命令
  6. make install命令
  7. ldconfig命令
  8. 配置环境变量

环境变量配置如图

image-20200704091051391

注意!!protobuf没有bin,不需要配置到bin下

如果配置环境后,查看版本没有成功,就输入source /etc/profile重编一下path

安装其他环境

1
2
3
4
sudo yum install openssl-devel
# 安装openssl-devel库
sudo yum install ncurses-devel
# 安装ncurces-devel库

开始编译

  1. 解压hadoop源码包到指定目录

  2. 进入该目录,使用mvn执行编译(这个过程十分漫长,请耐心等待)

  3. df -h查看磁盘

    sdjkal

    1
    2
    # 注意!!!查看磁盘是否足够,是否有2g以上,然后再执行命令(在漫长的等待后,我因为磁盘不足,failed一次,血的教训)
    mvn package -Pdist,native -DskipTests -Dtar
  4. 如果你的版本和我要求的版本都一样的话(要求jdk1.7、Maven3.3.0+、ant无要求,protobuf2.5)是可以成功的

img

  1. 成功