zoukankan      html  css  js  c++  java
  • 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
    ###########################################################################################
  • 相关阅读:
    hdu 4521 小明系列问题——小明序列(线段树 or DP)
    hdu 1115 Lifting the Stone
    hdu 5476 Explore Track of Point(2015上海网络赛)
    Codeforces 527C Glass Carving
    hdu 4414 Finding crosses
    LA 5135 Mining Your Own Business
    uva 11324 The Largest Clique
    hdu 4288 Coder
    PowerShell随笔3 ---别名
    PowerShell随笔2---初始命令
  • 原文地址:https://www.cnblogs.com/frx9527/p/hadoop.html
Copyright © 2011-2022 走看看