1.hadoop集群的安装
实际开发的真实部署
学习中的部署
1.准备Linux环境
1.0先将虚拟机的网络模式选为NAT
1.1修改主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=itcast ###
1.2修改IP
两种方式:
第一种:通过Linux图形界面进行修改(强烈推荐)
进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply
第二种:修改配置文件方式(屌丝程序猿专用)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static" ###
HWADDR="00:0C:29:3C:BF:E7"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
IPADDR="192.168.1.101" ###
NETMASK="255.255.255.0" ###
GATEWAY="192.168.1.1" ###
1.3修改主机名和IP的映射关系
vim /etc/hosts
192.168.1.101 itcast
1.4关闭防火墙
#查看防火墙状态
service iptables status
#关闭防火墙
service iptables stop
#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off
1.5 修改sudo
su root
vim /etc/sudoers
给hadoop用户添加执行的权限
关闭linux服务器的图形界面:
vi /etc/inittab
1.5重启Linux
reboot
2.安装JDK
2.1上传alt+p 后出现sftp窗口,然后put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz
2.2解压jdk
#创建文件夹
mkdir /home/hadoop/app
#解压
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app
2.3将java添加到环境变量中
vim /etc/profile
#在文件最后添加
export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
export PATH=$PATH:$JAVA_HOME/bin
#刷新配置
source /etc/profile
3.安装hadoop2.4.1
先上传hadoop的安装包到服务器上去/home/hadoop/
注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop
伪分布式需要修改5个配置文件
3.1配置hadoop
第一个:hadoop-env.sh
vim hadoop-env.sh
#第27行
export JAVA_HOME=/usr/java/jdk1.7.0_65
第二个:core-site.xml
fs.defaultFS
hdfs://weekend-1206-01:9000
hadoop.tmp.dir
/home/hadoop/hadoop-2.4.1/tmp
第三个:hdfs-site.xml
dfs.replication
1
dfs.secondary.http.address
192.168.1.152:50090
第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
mapreduce.framework.name
yarn
第五个:yarn-site.xml
yarn.resourcemanager.hostname
weekend-1206-01
yarn.nodemanager.aux-services
mapreduce_shuffle
3.2将hadoop添加到环境变量
vim /etc/proflie
export JAVA_HOME=/usr/java/jdk1.7.0_65
export HADOOP_HOME=/itcast/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
3.3格式化namenode(是对namenode进行初始化)
hdfs namenode -format (hadoop namenode -format)
3.4启动hadoop
先启动HDFS
sbin/start-dfs.sh
再启动YARN
sbin/start-yarn.sh
3.5验证是否启动成功
使用jps命令验证
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode
http://192.168.1.101:50070 (HDFS管理界面)
http://192.168.1.101:8088 (MR管理界面)
4.配置ssh免登陆
#生成ssh免登陆密钥
#进入到我的home目录
cd ~/.ssh
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id localhost
---------------------------
ssh免登陆:
生成key:
ssh-keygen
复制从A复制到B上:
ssh-copy-id B
验证:
ssh localhost/exit,ps -e|grep ssh
ssh A #在B中执行
查看防火墙的状态的命令为:sudo systemctl status firewalld。
打开防火墙的方式有两种,
一种是打开后重启会恢复回原来的状态,命令为:sudo systemctl start firewalld;
另一种是打开后重启不会恢复到原来的状态:sudo systemctl enable firewalld,这种方式输入命令后要重启系统才会生效。
关闭防火墙的方式也有两种,和打开相对应,命令分别为
sudo systemctl stop firewalld
sudo systemctl disable firewalld。
hostnamectl set-hostname centos77.magedu.com # 使用这个命令会立即生效且重启也生效
1.上传安装包到家目录下
2.在加目录下创建apps目录
3.解压hadoop到apps下
4.修改配置文件(配置信息其实可以写在同一个文件中,单便于管理分开写)
5.vi core-site.xml
fs.defaultFS
hdfs://192.168.186.5:9000#指定文件系统的类型及namenode
hadoop.tmp.dir
/home/hadoop/hdpdata
configuration>
7.vi mapred-site.xml.template
mapreduce.framework.name#指定MapReduce运行的集群
yarn#默认为local,在本地
8.mv mapred-site.xml.template mapred-site.xml
9. vi yarn-site.xml
yarn.resourcemanager.hostname
192.168.186.5
yarn.nodemanager.aux-services
mapreduce_shuffle
10.将apps发给其他机器
scp -r apps/ 192.168.186.7:/home/hadoop/
…
11.关闭防火墙及配置hadoop的环境变量
sudo service iptables stop
sudo service iptables status
sudo chkconfig iptables off
sudo chkconfig iptables --list
vi /etc/profile
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.4
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin
12.将/etc/profile复制给其他机器
12.1在datanode上配置salves文件,和hosts文件(必须配hosts文件才能找到salve,salves文件是给自动启动脚本用的)
13.格式化文件系统
hadoop namenode -format
14.分别启动namenode .datanode
hadoop-daemon.sh start namenode
hadoop-daemon.sh stop datanode
二.hadoop的shell操作
~/hdpdata/dfs/data/current/BP-1375190175-192.168.186.5-1569144114991/current/finalized/该路径为数据的储存位置
/home/hadoop/apps/hadoop-2.6.4/bin/hadoop为hadoop的客户端
hadoop fs -put/get 文件名 目的地
其他操作与linux一致
三。MapReduce的实例
3.2 常用命令参数介绍或hdfs dfs
-help 功能:输出这个命令参数手册
-ls 功能:显示目录信息示例: hadoop fs -ls hdfs://hadoop-server01:9000/备注:这些参数中,所有的hdfs路径都可以简写–>hadoop fs -ls / 等同于上一条命令的效果
-mkdir 功能:在hdfs上创建目录示例:hadoop fs -mkdir -p /aaa/bbb/cc/dd
-moveFromLocal 功能:从本地剪切粘贴到hdfs示例:hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd-moveToLocal 功能:从hdfs剪切粘贴到本地示例:hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt
–appendToFile 功能:追加一个文件到已经存在的文件末尾示例:hadoop fs -appendToFile ./hello.txt hdfs://hadoop-server01:9000/hello.txt可以简写为:Hadoop fs -appendToFile ./hello.txt /hello.txt
-cat 功能:显示文件内容 示例:hadoop fs -cat /hello.txt -tail 功能:显示一个文件的末尾示例:hadoop fs -tail /weblog/access_log.1-text 功能:以字符形式打印一个文件的内容示例:hadoop fs -text /weblog/access_log.1
-chgrp-chmod-chown功能:linux文件系统中的用法一样,对文件所属权限示例:hadoop fs -chmod 666 /hello.txthadoop fs -chown someuser:somegrp /hello.txt
-copyFromLocal 功能:从本地文件系统中拷贝文件到hdfs路径去示例:hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/-copyToLocal 功能:从hdfs拷贝到本地示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz
-cp 功能:从hdfs的一个路径拷贝hdfs的另一个路径示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2 -mv 功能:在hdfs目录中移动文件示例: hadoop fs -mv /aaa/jdk.tar.gz /
-get 功能:等同于copyToLocal,就是从hdfs下载文件到本地示例:hadoop fs -get /aaa/jdk.tar.gz-getmerge 功能:合并下载多个文件示例:比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…hadoop fs -getmerge /aaa/log.* ./log.sum
-put 功能:等同于copyFromLocal示例:hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
-rm 功能:删除文件或文件夹示例:hadoop fs -rm -r /aaa/bbb/ -rmdir 功能:删除空目录示例:hadoop fs -rmdir /aaa/bbb/ccc
-df 功能:统计文件系统的可用空间信息示例:hadoop fs -df -h / -du功能:统计文件夹的大小信息示例:hadoop fs -du -s -h /aaa/*
-count 功能:统计一个指定目录下的文件节点数量示例:hadoop fs -count /aaa/
-setrep 功能:设置hdfs中文件的副本数量示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz<这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量>
简单的HDFS的java操作:
package hadoop.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
/**
@program:bigdata
@package:hadoop.hdfs
@filename:SimpleHdfsDemo.java
@create:2019.09.22.20.19
@author:Administrator
@descrption.
*/
public class SimpleHdfsDemo {
FileSystem fs=null;
@Before
public void init() throws Exception {
Configuration conf=new Configuration();
// conf.set(“fs.defaultFS”,“hdfs://master:9000”);
// 这种方式需要在运行时加参数指定用户-DHADOOP_USER_NAME=hadoop
fs=FileSystem.get(new URI(“hdfs://192.168.186.5:9000”),conf,“hadoop”);
}
@Test
public void testUpload() throws Exception {
fs.copyFromLocalFile(
new Path(“D:\大数据\大数据全套 (已分享)\文档资料\day06\day06\hadoop2.4.1集群搭建.txt”),
new Path("/test1.txt"));
fs.close();
}
@Test
public void testDownload() throws IOException {
fs.copyToLocalFile(new Path("/test1.txt"),new Path(“d:\2.txt”),);
fs.close();
}
}
如果涉及到读操作,则需要本地有hadoop客户端
如果下载的过程中出现了 HADOOP_HOME and hadoop.home.dir are unset,那么就说明你没有配置windows本地的hadoop环境变量.你可能会想我是远程调用linux下的hadoop,与我本地的hadoop有什么关系?如果你的操作只对远程的hadoop生效,如上传,创建目录,文件改名(写)等那么你是不需要在windows本地配置hadoop的,可一旦涉及到下载(读),hadoop内部的缓存机制要求本地也必须有hadoop,于是也会出现HADOOP_HOME and hadoop.home.dir are unset,解决办法配置HADOOP_HOME并加入%HADOOP_HOME%\bin到PATH中,之后测试下hadoop version命令,有效的话重启你的eclipse/myeclipse,但这还不够,windows下的hadoop还需要winutils.exe,否则会报Could not locate Hadoop executable: xxxx\winutils.exe