Hadoop入坑之路(一)
入坑准备
在开始学习Hadoop之前需要提前准备几个服务器。我在虚拟机上提前准备了4个Centos_7 64位的操作系统。并需要完成一下配置:
网络配置:
1.修改主机名
2.设置映射关系
[root@master ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 222.18.157.50 hdp-master 222.18.157.51 hdp-slaver1 222.18.157.52 hdp-slaver2 222.18.157.53 hdp-slaver3
3.修改IP地址
[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 DEVICE=ens33 ONBOOT=yes # ipaddr gateway netmask dns IPADDR=222.18.157.50 GATEWAY=222.18.157.2 NETMASK=255.255.255.0 DNS1=114.114.114.114 DNS2=8.8.8.8
免密登陆设置:
在整个学习过程中,将hdp-master(222.18.157.50)设置为主机。hdp-slaver1(222.18.157.51)、hdp-slaver2(222.18.157.52)、hdp-slaver3(222.18.157.53)设置为从机。
在整个过程中,为了方便主机对从机的管理,需要进行免密登陆配置。
[root@hdp-master ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:kJEWZWy/U0INFpu5C58hcpPeeKLyeearUfUUK7JffQ0 root@hdp-master The key's randomart image is: +---[RSA 2048]----+ | o=o ++. | | o+o..+.o | | .o..o* o E | | . =o=.. ..| | . S o+o . o| | = Oo= . | | . + B. | | . +oo | | o==o. | +----[SHA256]-----+
可以发现目录中多了一个.ssh隐藏文件,进入可以查看已经生成了相应的公钥和私钥文件。
[root@hdp-master ~]# cd .ssh/ [root@hdp-master .ssh]# ll 总用量 8 -rw-------. 1 root root 1679 9月 10 21:26 id_rsa -rw-r--r--. 1 root root 397 9月 10 21:26 id_rsa.pub
将公钥文件拷贝到从机上即可。
[root@hdp-master .ssh]# ssh-copy-id root@hdp-slaver1 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@hdp-slaver1's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@hdp-slaver1'" and check to make sure that only the key(s) you wanted were added.
这样hdp-master的公钥就成功的拷贝到了从机hdp-slaver1上。注意,免密登陆是单向的。
JDK安装:
由于Hadoop是用Java开发的,所以在正式安装Hadoop之前还需要安装JDK,点击这里下载JDK。从官网上下载JDK的Linux版本的.tar.gz压缩包并解压。
将JDK添加到环境变量中,打开/etc/profile文件,并在最后添加以下代码:
export JAVA_HOME=/root/learn_hadoop/jdk
export PATH=.:$PATH:$JAVA_HOME/bin
再执行source /etc/profile命令,使修改后的配置文件生效。可以执行以下命令查看Java的版本:
[root@hdp-master learn_hadoop]# java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Hadoop安装
经过了上述繁琐的准备之后,现在开始正式安装hadoop了。同样需要从Hadoop官方网站上下载安装包。在这里我下载的Hadoop版本是3.1.1,将下载后的安装包解压。
环境变量配置:
打开/etc/profile文件并添加下列代码并执行source /etc/profile代码:
export HADOOP_HOME=/root/learn_hadoop/hdp
export PATH=.:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改core-site.xml
在/root/learn_hadoop/hdp/etc/hadoop路径下修改core-site.xml配置文件:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://222.18.157.50:9000</value> </property> </configuration>
修改hdfs-site.xml
在/root/learn_hadoop/hdp/etc/hadoop路径下修改hdfs-site.xml配置文件:
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/root/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/root/dfs/data</value> </property> </configuration>
在Hadoop安装过程中的一些基本配置已经完成,为了避免在从机中进行相同的操作,只需要将主机中的包拷贝到从机中即可。
HDFS客户端的操作
HDFS客户端有多种形式:
1.网页模式
2.命令行模式
客户端在那里运行并没有约束,只要运行客户端的机器能够和HDFS集群连网就行。
文件的切块大小和存储的副本数量,都是由客户端决定!
所谓的由客户端决定,是通过配置参数来定的。HDFS的客户端会读以下两个参数,来决定切块大小、副本数量:
切块大小的参数: dfs.blocksize
副本数量的参数: dfs.replication
启动HDFS
在第一次启动HDFS前需要初始化namenode的元数据目录。(这一步非常重要!!!)
hadoop namenode -format
然后在hdp-master主机上启用namenode的进程
hdfs --daemon start namenode
在windows中用浏览器访问namenode提供的web端口:9870即可。
hdfs://222.18.157.50:9870
最后就可以启动集群中的datanode
hdfs --daemon start datanode
自动启动Hadoop集群
1. 配置在目录 $HADOOP_HOME/etc/hadoop/ 下的 workers文件。将需要统一启动的集群主机名写入文件。
2. 配置在目录 $HADOOP_HOME/sbin/ 下的文件 start-dfs.sh 和 stop-dfs.sh:
分别在文件前面写入下列语句:
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
3. 配置在目录 $HADOOP_HOME/sbin/ 下的文件 start-yarn.sh 和 stop-yarn.sh:
分别在文件前边写入下列语句:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
配置完成后就可以在Linux终端执行 start ,stop 语句,实现自动启动集群功能。
HDFS客户端命令行操作命令
查看hdfs中的目录信息
hadoop fs -ls /hdfs路径
上传文件到hdfs中
hadoop fs -put /本地文件 /aaa hadoop fs -copyFromLocal /本地文件 /hdfs路径 ## copyFromLocal等价于 put hadoop fs -moveFromLocal /本地文件 /hdfs路径 ## 跟copyFromLocal的区别是:从本地移动到hdfs中
下载文件到客户端本地磁盘
hadoop fs -get /hdfs中的路径 /本地磁盘目录 hadoop fs -copyToLocal /hdfs中的路径 /本地磁盘路径 ## 跟get等价 hadoop fs -moveToLocal /hdfs路径 /本地路径 ## 从hdfs中移动到本地
在hdfs中创建文件夹
hadoop fs -mkdir -p /aaa/xxx
移动hdfs中的文件(更名)
hadoop fs -mv /hdfs的路径 /hdfs的另一个路径
删除hdfs中的文件或文件夹
hadoop fs -rm -r /aaa
修改文件的权限
hadoop fs -chown user:group /aaa hadoop fs -chmod 700 /aaa
追加内容到已存在的文件
hadoop fs -appendToFile /本地文件 /hdfs中的文件
显示文本文件的内容
hadoop fs -cat /hdfs中的文件 hadoop fs -tail /hdfs中的文件