• Hadoop学习笔记01_Hadoop搭建


    想往大数据方向转, 难度肯定是有的。

    基础知识肯定是要有的,如果是熟悉JAVA开发的人,转向应该优势大。

    像我这样的,只有Linux基础以及简单的PHP基础的人,转向难度很大。但是事在人为,努力学习多加练习,寻找机会应该可以的。

    以下是学习笔记,自己的笔记自己看懂,所以尽量简短 :

    T440P上装了Vm12, 添加三台Centos6.5 各1G内存,按照下方的笔记内容设置网络和环境。

    前面部分的都是centos的基本操作。涉及vim, 以及一些Linux命令。

    设置时间、主机名、IP、关闭防火墙,开启互信,安装JDK,添加环境变量等。

    三台机器:master, slave1, slave2

    ############# vim ###########################################
    命令模式下:
    1)把光标移动到要复制的行上,按yy (复制当前行) 
    2)把光标移动到要复制的位置 ,按p (粘贴到指定行)
    3)把光标移动到要复制的位置 ,按dd(删除当前行)
    
    移动光标: hjkl 左下上右
    ctrl+u:到文件头
    ctrl+d:到文件尾
    shift+h:到屏幕第一行,shift+m:到屏幕中间,shift+l:到最后一行, shift+zz 保存退出
    :n 到第n 行
    ^ 到行首,$ 到行尾 (这两个与正则一样)
    
    查找:
    /xx 查找xx
    n下一个,N上一个
    撤销更改:u:取消更改
    插入:a从光标后,i从光标前,o从光标下一行
    
    ##配置文件 vim /etc/vimrc
    set nu   # 行号
    set ts=4 # tab距离4空格
    set et   # tab转换为真正的空格
    
    # modeline 相当于文件格式配置
    # vim:et:ts=4:sw=4:
    ############# vim  end #########################################
    pwd
    ls -al
    cat 1.txt | sort -k1 -nr #显示文件,k1第一列,n转换成数字 r降序
    > 1.txt # 清空文件内容
    tail -F 1.txt #追踪某文件的内容.
    
    kill -s 9 1827 #强杀进程
    
    date -s "2018-01-01 14:22:33" # 修改时间 参数后面加字符串
    clock -w # 写入硬件时钟
    date -R #显示时区 tzselect #时区向导 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区

    yum install ntp # 安装ntp服务
    ntpdate pool.ntp.org # ntp对时
    chkconfig ntpd on
    /etc/init.d/ntpd start
    clock -w # 写入硬件时钟

    
    vim /etc/rc.local #可设置开机启动项目 
    #例如,在最后加上 /etc/init.d/mysqld start则可以启动mysqld
    
    # mongodb的启动命令
    /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs --fork
    ############################### user ###############################
    useradd test
    passwd test
    vim /etc/sudoers # 为新用户添加sudo权限. 这样test用户才可以使用sudo
        test  ALL=(ALL)    ALL
        
    userdel -r test
    vim /etc/passwd #可以查看系统中的所有用户 
        root:x:0:0:root:/root:/bin/bash
        # 用户名:密码x:用户id0:组id0:描述信息root:用户根目录/root/:用户登录后的shell
        # x 是表示此处为空;采用shadow passwd,影子密码在 /etc/shadow 文件
    
    ############################ network ###############################
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
        DEVICE="eth0"
        BOOTPROTO="static"
        HWADDR="00:0C:29:F5:05:8E"
        NM_CONTROLLED="yes"
        ONBOOT="yes"
        TYPE="Ethernet"
        IPADDR=192.168.112.10
        NETMASK=255.255.255.0
        GATEWAY=192.168.112.2
        DNS1=192.168.112.2
    ##可删除HWADDR,UUID
    service network restart
    
    ##网卡更换后,可编辑 vim /etc/udev/rules.d/70-persistent-net.rules
    reboot
    
    ifconfig
    curl www.baidu.com
    netstat #网络端口监听 -a显示所有选项, -t仅显示TCP, -u仅显示UDP, -l仅列出有监听的.
    netstat -nltp
    
    #修改hosts和主机名
    # 修改/etc/hosts 以及/etc/sysconfig/network 文件, 分别设置不同的HOSTNAME
    vim /etc/hosts
    192.168.112.10 master
    192.168.112.11 slave1
    192.168.112.12 slave2
    
    hostname master
    vim /etc/sysconfig/network
    HOSTNAME=master
    
    ### 每台都要 关闭下列防火墙
    service iptables stop  
    setenforce 0  
    chkconfig iptables off
    
    #################################  crontab  #################################
    # crontab:
    crontab -l #查看当前用户的crontab内容.
    crontab -r #删除定时任务配置,如果不指定用户,则删除当前用户的.
    crontab -e #编辑某个用户的crontab内容.
    #crontab格式
    #分 时 日 月 周 命令
    0 0 * * * /shell/upFile2HDFS.sh   #每天0点执行一次
    
    */1 * * * * date >> /test/date.txt #每分钟将时间写入文件
     
    30 21 * * * /usr/local/etc/rc.d/httpd restart #每天21:30执行一次命令
    
    0,30 18-23 * * 6,0 /usr/local/etc/rc.d/httpd restart #每个周六,周日的18点到23点,每隔30分钟
    
    #################################  建立每台电脑的互信关系  #################################
    ssh-keygen  #创建.ssh目录
    ssh-copy-id slave1 #复制公钥到每台目标主机
    
    ssh root@slave1 ##或者 ssh root@slave2 都能成功,不用密码,则互信成功.
    
    
    ################################# JDK  #################################
    rpm -qa | grep java #先查看自带java 如果有就卸载
    rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 #卸载
    rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5  #卸载
    #或者yum -y remove 卸载
    yum -y remove java-1.4.2-gcj-compat #
    
    # 使用挂载方式或sftp上传java到主机
    # secureCRT中alt+p可开启sftp. 或者安装lrzsz
    yum -y install lrzsz #安装后,rz上传,sz下载
    
    cd /mnt/hgfs   
    cp -R share_folder /usr/local/src
    cd /usr/local/src
     ./jdk-6u45-linux-x64.bin 
     
    # 如果是tar包, 就tar -zxvf jdk-8u161-linux-x64.tar.gz
    cd /usr/local/src/jdk1.8.0_161
    
    # 修改用户下面的 .bash_profile文件,也可以用root用户修改/etc/profile文件
    vim /etc/profile
    ...
    export JAVA_HOME=/usr/local/src/jdk1.8.0_161
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    :wq
    
    source /etc/profile #重新加载这个配置文件
    which java
    
    scp -rp /etc/profile slave1:/usr/local/src
    scp -rp /etc/profile slave2:/usr/local/src
    
    ######################## hadoop ################################# #前提:主机名
    /hosts/时间同步/JDK/关闭防火墙/互信 cd /usr/local/src tar -zxvf hadoop-2.7.5.tar.gz cd hadoop-2.7.5 mkdir tmp #创建hadoop运行时所需的临时目录 /usr/local/src/hadoop-2.7.5/tmp cd etc/hadoop vim hadoop-env.sh export JAVA_HOME=/usr/local/src/jdk1.8.0_161 vim core-site.xml <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/src/hadoop-2.7.5/tmp</value> </property> <!-- property> <name>io.file.buffer.size</name> (用作序列化文件处理时读写buffer的大小) <value>131702</value> </property --> vim hdfs-site.xml <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>slave1:50090</value> </property> vim mapred-site.xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--历史服务器,查看Mapreduce作业记录--> <!-- <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> --> <!-- 连接jobtrack服务器的配置项,默认不写是local --> <!-- <property> <name>mapred.job.tracker</name> <value>http://cy-hmaster-01:9001</value> </property> --> vim yarn-site.xml <!-- 指定YARN的老大 --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <!-- NodeManager上运行的附属服务.需配置成mapreduce_shuffle 才可运行MapReduce程序默认值 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> vim slaves master slave1 slave2 #写上各个主机名 ## 再次编辑profile vim /etc/profile #增加如下两行 export HADOOP_HOME=/usr/local/src/hadoop-2.7.5 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin :wq ls -rlt #修改了6个配置文件
    #### 注意: 配置文件如果写了中文,一定要注意编码问题。最好不出现中文。 #
    -site.xml文件优先于default.xml生效 # 全部复制到其它机器 scp -r hadoop-2.7.5/ root@slave1:/usr/local/src scp -r hadoop-2.7.5/ root@slave2:/usr/local/src scp -r /etc/profile root@slave1:/etc/ scp -r /etc/profile root@slave2:/etc/ source /etc/profile ###################### hadoop 启动 ########################### hdfs namenode -format # HDFS 初始格式化, 只能进行一次. start-dfs.sh # 启动HDFS start-yarn.sh # 启动YARN sbin/start-all.sh #启动所有 旧版本使用 jps #查看NameNode 和 DataNode 如果有则正常. ###################### hadoop 操作 ########################### http://master:50070 # Web界面 在NameNode上 http://master:8088 # 在ResourceManager上 hdfs dfs -ls -h / #查看文件列表 -h表示使用人性化方式显示文件大小 hdfs dfs -mkdir /hello #创建目录 -p表示如果没有父目录,就一起创建。 hdfs dfs -put -f /etc/passwd / #上传文件 -f 覆盖已存在的. hdfs dfs -appendToFile 2.txt /1.txt #把2的文件内容附加到1里 . hdfs dfs -get /hello ./ #下载文件到本地系统当前目录 -crc 加上校验。 hdfs dfs -getmerge /hello/log.* ./ #合并下载多个文件到本地系统当前目录。 hdfs dfs -cat /passwd #显示文件 hdfs dfs -tail /passwd #显示文件最后1千字符 hdfs dfs -rm -r /aaa/bbb/ #只删除空目录和文件, -r则递归删除. hdfs dfs -df -h / #统计文件系统的可用空间. hdfs dfs -du /hello #显示目录中所有文件大小. hdfs dfs -setrep -w 3 -R /user # 改变一个文件的副本系数. -R用于递归改变目录下的所有文件副本系数. hdfs dfsadmin -report #查看报告 cd /usr/local/src/hadoop-2.7.5/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-2.7.5.jar pi 20 50 #运行一个示例mapreduce # hadoop程序建议使用hadoop开头的命令, hdfs操作建议使用hdfs开头. 两种命令要有所区分 hadoop fs -ls hdfs://master:9000/ hadoop fs -ls / hadoop fs -ls file:///root # yarn yarn rmadmin –getServiceState rm1 #查看状态的命令 yarn rmadmin –transitionToStandby rm1 #状态切换的命令 ####################### HDFS 原理 ############################################# NameNode是HDFS的核心,称为Master, NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件. NameNode不存储实际数据或数据集,数据本身存储在DataNode中, NameNode知道HDFS中任何给定文件的块列表及其位置,使用此信息NN知道如何从块中构建文件. NN并不持久化存储每个文件中各个块所在DN的位置信息,这些信息会在系统启动时从数据节点重建 NN对于HDFS至关重要,当NN关闭时,hadoop集群无法访问. NN是Hadoop集群中的单点故障. NN所在机器通常会配置大量内存RAM. DN启动时,将自己发布到NN并汇报自己负责持有的块列表. 当某个DN关闭时,它不会影响数据或集群的可用性,NN将安排其它DN管理的块进行副本复制. DN所在机器通常配置大量硬盘空间.因为实际数据存储在DN中, DN会定期(dfs.heartbeat.interval配置项,默认3秒)向NN发送心跳,如果NN长时间没有收到DN发送的心跳,NN就会认为该DN失效. block汇报时间间隔取参数dfs.blockreport.intervalMsec 参数未配置的话默认为6小时. ##################################### HDFS工作机制 ############################# Secondary NameNode 协助NN进行元数据的备份. 可以理解为NN的秘书 客户端请求访问HDFS都是通过向NN申请来进行.

    补充: 单机伪分布式

    ########################### 以下是补充的单机和伪分布的知识###########################
    # hostname 不能使用带下划线的
    # 
    
        第二节:Hadoop的本地模式
            1、特点:不具备HDFS,只能测试MapReduce程序
            2、修改hadoop-env.sh
            
               修改大约第25行:export JAVA_HOME=/usr/local/src/jdk1.8.0_161
               
            3、演示Demo: $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar
                命令:hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /root/data/input/data.txt  /root/data/output/wc
                日志:17/08/04 23:28:38 INFO mapreduce.Job:  map 100% reduce 100%
            
                注意:MR有一个默认的排序规则
    
        第三节:Hadoop的伪分布模式
            1、特点:具备Hadoop的所有功能,在单机上模拟一个分布式的环境
                     (1)HDFS:主:NameNode,数据节点:DataNode
                     (2)Yarn:容器,运行MapReduce程序
                                主节点:ResourceManager
                                从节点:NodeManager
                                
            2、步骤:
            # 注意:hostname 不能使用带下划线的,修改以下5个文件的配置即可
            (1)hdfs-site.xml
                <!--配置HDFS的冗余度-->
                <property>
                  <name>dfs.replication</name>
                  <value>1</value>
                </property>
    
                <!--配置是否检查权限-->
                <property>
                  <name>dfs.permissions</name>
                  <value>false</value>
                </property>
                
                <!-- 也可以指定HDFS块大小 -->
                <property>
                    <name>dfs.blocksize</name>
                    <value>32m</value>
                </property>2)core-site.xml
                <!--配置HDFS的NameNode-->
                <property>
                  <name>fs.defaultFS</name>
                  <value>hdfs://192.168.88.11:9000</value>
                </property>
    
                <!--配置DataNode保存数据的位置-->
                <property>
                  <name>hadoop.tmp.dir</name>
                  <value>/root/training/hadoop-2.4.1/tmp</value>
                </property>        
                
                
            (3) mapred-site.xml
                <!--配置MR运行的框架-->
                <property>
                  <name>mapreduce.framework.name</name>
                  <value>yarn</value>
                </property>        
                
            (4) yarn-site.xml
                <!--配置ResourceManager的地址-->
                <property>
                  <name>yarn.resourcemanager.hostname</name>
                  <value>192.168.88.11</value>
                </property>
    
                <!--配置NodeManager执行任务的方式-->
                <property>
                  <name>yarn.nodemanager.aux-services</name>
                  <value>mapreduce_shuffle</value>
                </property>
            
            (5) slaves
                # 只放一个本机hostname 即可,或者 localhost
    
            (6) 格式化NameNode
                hdfs namenode -format
                日志:Storage directory /root/training/hadoop-2.4.1/tmp/dfs/name has been successfully formatted.
                    
                    
            (7) 启动:start-all.sh
                       (*) HDFS: 存储数据
                       (*) Yarn:执行计算
                检查以下进程是否启动:
                SecondaryNameNode
                ResourceManager
                NodeManager
                DataNode
                NameNode            
                
            (8) 访问:(*)命令行
                      (*)Java API
                      (*)Web Console:
                            HDFS:http://192.168.88.11:50070
                            Yarn:http://192.168.88.11:8088
    ###########################################################################################
  • 相关阅读:
    实体机可以ping通虚拟机,虚拟机ping不通实体机
    实体机可以ping通虚拟机,虚拟机ping不通实体机
    eclipse快捷键
    eclipse快捷键
    利用信号捕捉函数回收子进程
    进程间通信_信号
    进程间通信_管道
    创建子进程
    系统编程入门
    JPG库移植与使用
  • 原文地址:https://www.cnblogs.com/frx9527/p/hadoop.html
Copyright © 2020-2023  润新知