林子雨编著《大数据基础编程、实验和案例教程》教材第3章的代码

大数据学习路线图

林子雨编著《大数据基础编程、实验和案例教程》(教材官网)教材中的代码,在纸质教材中的印刷效果不是很好,可能会影响读者对代码的理解,为了方便读者正确理解代码或者直接拷贝代码用于上机实验,这里提供全书配套的所有代码。
查看教材所有章节的代码

第3章 Hadoop的安装和使用

教材第52页

(温馨提示:代码框上方的复制代码按钮,也就是“两张A4纸图标”,用鼠标点击复制代码按钮,就可以把代码框中的代码复制到粘贴板,粘贴到其他地方。但是,有的浏览器可能不支持该功能)

  1. sudo apt-get update
Shell 命令
  1. sudo apt-get install openssh-server
Shell 命令
  1. ssh localhost
Shell 命令

教材第53页

  1. cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
  2. ssh-keygen -t rsa # 会有提示,都按回车即可
  3. cat ./id_rsa.pub >> ./authorized_keys # 加入授权
Shell 命令

教材第54页

  1. sudo apt-get install openjdk-7-jre openjdk-7-jdk
Shell 命令
  1. dpkg -L openjdk-7-jdk | grep '/bin/javac'
Shell 命令
  1. vim ~/.bashrc
Shell 命令
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
  1. source ~/.bashrc # 使变量设置生效
Shell 命令
  1. echo $JAVA_HOME # 检验变量值
  2. java -version
  3. $JAVA_HOME/bin/java -version # 与直接执行java -version一样
Shell 命令

教材第55页

  1. sudo apt-get install default-jre default-jdk
Shell 命令
  1. vim ~/.bashrc
Shell 命令
export JAVA_HOME=/usr/lib/jvm/default-java
  1. source ~/.bashrc # 使变量设置生效
Shell 命令
  1. echo $JAVA_HOME # 检验变量值
  2. java -version
  3. $JAVA_HOME/bin/java -version # 与直接执行java -version一样
Shell 命令

教材第56页

  1. sudo tar -zxf ~/下载/hadoop-2.7.1.tar.gz -C /usr/local # 解压到/usr/local中
  2. cd /usr/local/
  3. sudo mv ./hadoop-2.7.1/ ./hadoop # 将文件夹名改为hadoop
  4. sudo chown -R hadoop ./hadoop # 修改文件权限
Shell 命令
  1. cd /usr/local/hadoop
  2. ./bin/hadoop version
Shell 命令
  1. cd /usr/local/hadoop
  2. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar
Shell 命令
  1. cd /usr/local/hadoop
  2. mkdir input
  3. cp ./etc/hadoop/*.xml ./input # 将配置文件复制到input目录下
Shell 命令

教材第57页

  1. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
  2. cat ./output/* # 查看运行结果
Shell 命令
  1. rm -r ./output
Shell 命令
<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>

教材第58页

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

教材第59页

  1. cd /usr/local/hadoop
  2. ./bin/hdfs namenode -format
Shell 命令
  1. cd /usr/local/hadoop
  2. ./sbin/start-dfs.sh #start-dfs.sh是个完整的可执行文件,中间没有空格
Shell 命令

教材第60页

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  1. jps
Shell 命令

教材第61页

  1. ./sbin/stop-dfs.sh # 关闭
  2. rm -r ./tmp # 删除 tmp 文件,注意这会删除 HDFS中原有的所有数据
  3. ./bin/hdfs namenode -format # 重新格式化名称节点
  4. ./sbin/start-dfs.sh # 重启
Shell 命令
  1. cd /usr/local/hadoop
  2. ./bin/hdfs dfs -mkdir -p /user/hadoop
Shell 命令

教材第62页

  1. cd /usr/local/hadoop
  2. ./bin/hdfs dfs -mkdir input #在HDFS中创建hadoop用户对应的input目录
  3. ./bin/hdfs dfs -put ./etc/hadoop/*.xml input #把本地文件复制到HDFS中
Shell 命令
  1. ./bin/hdfs dfs -ls input
Shell 命令
  1. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
Shell 命令
  1. ./bin/hdfs dfs -cat output/*
Shell 命令
  1. ./bin/hdfs dfs -rm -r output # 删除 output 文件夹
Shell 命令

教材第63页

  1. cd /usr/local/hadoop
  2. ./sbin/stop-dfs.sh
Shell 命令
  1. cd /usr/local/hadoop
  2. ./sbin/start-dfs.sh
Shell 命令
  1. cd /usr/local/hadoop
  2. mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
Shell 命令

教材第64页

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        </property>
</configuration>
  1. ./sbin/start-dfs.sh #启动Hadoop
  2. ./sbin/start-yarn.sh #启动YARN
  3. ./sbin/mr-jobhistory-daemon.sh start historyserver #开启历史服务器,才能在Web中查看任务运行情况
Shell 命令

教材第65页

  1. ./sbin/stop-yarn.sh
  2. ./sbin/mr-jobhistory-daemon.sh stop historyserver
  3. ./sbin/stop-dfs.sh
Shell 命令

教材第66页

export PATH=$PATH:/usr/local/hadoop/sbin
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

教材第67页

  1. sudo vim /etc/hostname
Shell 命令
hadoop@ dblab-VirtualBox:~$
hadoop@ Master:~$

教材第68页

  1. sudo vim /etc/hosts
Shell 命令
192.168.1.121   Master
192.168.1.122   Slave1
192.168.1.121   Master
192.168.1.122   Slave1
  1. ping Master -c 3 # 只ping 3次就会停止,否则要按Ctrl+c中断ping命令
  2. ping Slave1 -c 3
Shell 命令

教材第69页

  1. cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
  2. rm ./id_rsa* # 删除之前生成的公匙(如果已经存在)
  3. ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按回车就可以
Shell 命令
  1. cat ./id_rsa.pub >> ./authorized_keys
Shell 命令
  1. scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
Shell 命令
  1. mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
  2. cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
  3. rm ~/id_rsa.pub # 用完以后就可以删掉
Shell 命令

教材第70页

  1. ssh Slave1
Shell 命令
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

教材第71页

Slave1
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <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>

教材第72页

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
  1. cd /usr/local
  2. sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
  3. sudo rm -r ./hadoop/logs/* # 删除日志文件
  4. tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
  5. cd ~
  6. scp ./hadoop.master.tar.gz Slave1:/home/hadoop
Shell 命令

教材第73页

  1. sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
  2. sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
  3. sudo chown -R hadoop /usr/local/hadoop
Shell 命令
  1. hdfs namenode -format
Shell 命令
  1. start-dfs.sh
  2. start-yarn.sh
  3. mr-jobhistory-daemon.sh start historyserver
Shell 命令

教材第74页

  1. hdfs dfs -mkdir -p /user/hadoop
Shell 命令
  1. hdfs dfs -mkdir input
  2. hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
Shell 命令
  1. hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
Shell 命令

教材第75页

  1. stop-yarn.sh
  2. stop-dfs.sh
  3. mr-jobhistory-daemon.sh stop historyserver
Shell 命令

教材第76页

  1. uname –r
Shell 命令
  1. sudo apt-get update
  2. sudo apt-get install apt-transport-https ca-certificates
Shell 命令
  1. sudo apt-key adv \
  2. --keyserver hkp://ha.pool.sks-keyservers.net:80 \
  3. --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
Shell 命令
  1. echo deb https://apt.dockerproject.org/repo ubuntu-xenial main | sudo tee /etc/apt/sources.list.d/docker.list
Shell 命令
  1. sudo apt-get update
Shell 命令

教材第77页

  1. apt-cache policy docker-engine
Shell 命令
  1. sudo apt-get install docker-engine
Shell 命令
  1. sudo service docker start
Shell 命令
  1. sudo docker run hello-world
Shell 命令
  1. sudo groupadd docker
Shell 命令

教材第78页

  1. sudo usermod -aG docker hadoop
Shell 命令
  1. docker pull ubuntu
Shell 命令
  1. docker images
Shell 命令
  1. cd ~
  2. mkdir build
Shell 命令
  1. docker run -it -v /home/hadoop/build:/root/build --name ubuntu ubuntu
Shell 命令

教材第79页

  1. apt-get update
Shell 命令
  1. apt-get install vim
Shell 命令
  1. apt-get install ssh
Shell 命令
  1. /etc/init.d/ssh start
Shell 命令
/etc/init.d/ssh start
  1. ssh-keygen -t rsa #一直按回车键即可
  2. cd ~./ssh
  3. cat id_dsa.pub >> authorized_keys
Shell 命令

教材第80页

  1. apt-get install default-jdk
Shell 命令
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin
  1. source ~/.bashrc
Shell 命令
  1. docker login
Shell 命令
  1. docker ps
Shell 命令

教材第81页

  1. docker commit fd1fc69d75a3 ubuntu/jdkinstalled
Shell 命令
  1. docker images
Shell 命令
  1. docker run -it -v /home/hadoop/build:/root/build --name ubuntu-jdkinstalled ubuntu/jdkinstalled
Shell 命令
  1. docker ps
Shell 命令

教材第82页

  1. cd /root/build
  2. tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local
Shell 命令
  1. cd /usr/local
  2. mv ./hadoop-2.7.1 ./hadoop
  3. cd hadoop
  4. ./bin/hadoop version
Shell 命令

教材第83页

  1. cd /usr/local/hadoop
  2. vim etc/hadoop/hadoop-env.sh
Shell 命令
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
<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://master:9000</value>
      </property>
</configuration>

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/namenode_dir</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/datanode_dir</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

教材第84页

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
  </configuration>
<configuration>
  <!-- Site specific YARN configuration properties -->
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>master</value>
      </property>
  </configuration>
  1. docker commit a40b99f869ae ubuntu/hadoopinstalled
Shell 命令
  1. # 在第一个终端中执行下面命令
  2. docker run -it -h master --name master ubuntu/hadoopinstalled
  3. # 在第二个终端中执行下面命令
  4. docker run -it -h slave01 --name slave01 ubuntu/hadoopinstalled
  5. # 在第三个终端中执行下面命令
  6. docker run -it -h slave02 --name slave02 ubuntu/hadoopinstalled
Shell 命令

教材第85页

  1. ssh slave01
  2. ssh slave02
Shell 命令
  1. cd /usr/local/hadoop
  2. vim etc/hadoop/slaves
Shell 命令
Slave01
Slave02
  1. cd /usr/local/hadoop
  2. bin/hdfs namenode -format
  3. sbin/start-all.sh
Shell 命令

教材第86页

  1. cd /usr/local/hadoop
  2. ./bin/hdfs dfs -mkdir -p /user/hadoop/input
Shell 命令
  1. ./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input
Shell 命令
  1. ./bin/hdfs dfs -ls /user/hadoop/input
Shell 命令

教材第87页

  1. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input output 'dfs[a-z.]+'
Shell 命令
  1. ./bin/hdfs dfs -cat output/*
Shell 命令