hadoop安装及HDFS的简单操作

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.修改配置文件(配置信息其实可以写在同一个文件中,单便于管理分开写)

  1. cd etc/hadoop/
    2.vi hadoop-env.sh hadoop是通过ssh启动的,所以要重新配置JAVA_HOME
    export JAVA_HOME=/usr/local/jdk1.7.0_65

5.vi core-site.xml


fs.defaultFS
hdfs://192.168.186.5:9000#指定文件系统的类型及namenode


hadoop.tmp.dir
/home/hadoop/hdpdata

configuration>

  1. vi hdfs-site.xml(可以不用陪有默认值)


    dfs.replication
    2

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的实例

  1. apps/hadoop-2.6.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar中有很多MapReduce的例子
    2.运行实例 hadoop jar hadoop-mapreduce-examples-2.6.4.jar wordcount /wordcount/input /wordcount/output(输出目的的)

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

你可能感兴趣的:(大数据)