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
###########################################################################################
原文地址:https://www.cnblogs.com/frx9527/p/hadoop.html