hadoop3.2.0伪分布式搭建

一、hadoop发展由来、历史、子项目
什么是hadoop
Google Lab 开发的 Map/Reduce 和 Google File System(GFS) ,后由
apache基金会进行封装为MapReduce和HDFS组成
Hadoop的框架最核心的设计就是:HDFS和MapReduce。
HDFS为海量的数据提供了存储,
而MapReduce则为海量的数据提供了计算。

二、讲解HDFS(namenode和datanode),实现机制和优点

三、讲解MapReduce离线计算、Storm(流式计算,基于磁盘)、Spark(内存迭代计算,基于内存)

四、安装一台linux系统,版本为CentOS7
设置网卡在 /etc/sysconfig/network-scripts/ifcfg-enp0s3
ONBOOT=yes

虚拟机网络设置为桥接网络 选择对应联网方式
通过 ping www.baidu.com 来测试是否有网络

yum install net-tools

安装jdk1.8 并配置环境变量
https://www.cnblogs.com/Dylansuns/p/6974272.html

五、宿主机和虚拟机可以相互ping通,并在虚拟机设置静态IP
BOOTPROTO=static

DNS1=192.168.1.1
IPADDR=192.168.1.120
NETMASK=255.255.255.0
GATWAY=192.168.1.1
ZONE=public

六、创建用户,并赋权限
useradd user1 添加用户

passwd user1 设置密码

chown -R user:group 授权目录 例如:chown -R hadoop:hadoop /home

// userdel –r user3 删除用户及目录

七、SSH免密登录

切换到hadoop用户下操作

ssh-keygen -t rsa    

一路回车

ll -a

进入 ~/.ssh文件夹下

touch authorized_keys

cat id_rsa.pub >authorized_keys

chmod 600 authorized_keys

测试ssh hadoop-01机器名 IP地址

设置host:root用户下 vi /etc/hosts
添加内容:ip地址 名称

查看防火墙状态
service iptables status
关闭防火墙
service iptables stop
查看防火墙开机启动状态
chkconfig iptables --list
关闭防火墙开机启动
chkconfig iptables off
关闭防火墙
systemctl stop firewalld

重启linux系统

八、下载hadoop3.2.0
https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz

九、将hadoop包上传至 /home/software
下载前进入 /home/software
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz

tar -zxvf  hadoop..... -C 路径

yum -y install wget

10、解压至/home/app
tar -zxvf hadoop3.2.0 -C /home/app/

11、进入hadoop3.2.0/etc/hadoop

12、修改配置文件
1)core-site.xml:


fs.defaultFS
hdfs://hadoop-01:9000


hadoop.tmp.dir
/home/app/hadoop-3.2.0/tmp/

2)hdfs-site.xml:


dfs.replication
1

3)mapred-site.xml:


mapreduce.framework.name
yarn

4)yarn-site.xml:

 <!-- Site specific YARN configuration properties -->

 <property>
  <name>yarn.resourcemanager.hostname</name>
  <value>hadoop-01</value>
 </property>

 <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
 </property>

<!-- 进入hadoop中bin目录执行./hadoop classpath命令查看hadoop路径 -->
 <property>
  <name>yarn.application.classpath</name>
  <value>/home/app/hadoop-3.2.0/etc/hadoop:/home/app/hadoop-3.2.0/share/hadoop/common/lib/*:/home/app/hadoop-3.2.0/share/hadoop/common/*:/home/app/hadoop-3.2.0/share/hadoop/hdfs:/home/app/hadoop-3.2.0/share/hadoop/hdfs/lib/*:/home/app/hadoop-3.2.0/share/hadoop/hdfs/*:/home/app/hadoop-3.2.0/share/hadoop/mapreduce/lib/*:/home/app/hadoop-3.2.0/share/hadoop/mapreduce/*:/home/app/hadoop-3.2.0/share/hadoop/yarn:/home/app/hadoop-3.2.0/share/hadoop/yarn/lib/*:/home/app/hadoop-3.2.0/share/hadoop/yarn/*</value>
 </property>

</configuration>

13、配置hadoop环境变量 切换到root用户 vi /etc/profile source /etc/profile 使文件生效
export HADOOP_HOME=/home/app/hadoop-3.2.0
export JAVA_HOME=/home/app/jdk1.8.0_201
export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= JREHOME/libexportPATH={JAVA_HOME}/bin: H A D O O P H O M E / s b i n : {HADOOP_HOME}/sbin: HADOOPHOME/sbin:{HADOOP_HOME}/bin:$PATH

14、格式化namenode
hadoop namenode -format

15、启动hdfs: 在hadoop/sbin目录下
./start-dfs.sh

 vi hadoop-env.sh  
 添加java home路径:export JAVA_HOME=jdk路径
 
 jps查看启动项

16、启动yarn:start-yarn.sh
查看进程
jps netstat -nltp

17、hdfs操作
查看目录文件:hadoop fs -ls /
存放文件:hadoop fs -put 文件 /目录
获取文件:hadoop fs -get /文件名 /目录

tmp/dfs/data/current/BP.../current/finalized/sub..0/sub...0

文件大小默认为字节 b--》k-->m-->g-->t-->p   1024

18、进入cd share/hadoop/mapreduce/
创建一个测试文件后缀为.data

19、在hdfs上创建文件
hadoop fs -mkdir /wc
hadoop fs -mkdir /wc/srcdata

20、将测试文件上传到srcdata目录
hadoop fs -put test.data /wc/srcdata

查看 hadoop fs -ls /wc/srcdata

21、执行MapReduce中wordcount算法:
hadoop jar hadoop-mapreduce-examples-3.2.0.jar wordcount /wc/srcdata /wc/output

22、查看结果
hadoop fs -cat /wc/output/part-r-00000

23、通过浏览器可以访问hdfs文件系统
需要先开放namenode节点9870端口号
访问网址为:http://linux系统IP地址:9870
点击Utilities ---- Browse the file system

24、开放linux防火墙端口,hadoop3.x以上namenode web 端口改为9870 原端口号为50070
firewall-cmd --zone=public --add-port=9870/tcp --permanent

改完需要reload    firewall-cmd --reload	

25、退出安全模式
hadoop dfsadmin -safemode leave

26、
查看防火墙状态
service iptables status
关闭防火墙
service iptables stop
查看防火墙开机启动状态
chkconfig iptables --list
关闭防火墙开机启动
chkconfig iptables off
关闭防火墙
systemctl stop firewalld

# service firewalld start;  或者 #systemctl start firewalld.service;#开启防火墙
# service firewalld stop;  或者 #systemctl stop firewalld.service;#关闭防火墙
# service firewalld restart;  或者 #systemctl restart firewalld.service;  #重启防火墙
# systemctl disable firewalld.service#禁止防火墙开启自启
# systemctl enable firewalld.service#开启防火墙开启自启

27、java api操作hdfs

1) 导入jar包
	<dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>3.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>3.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs-client</artifactId>
        <version>3.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>3.2.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
2) 操作对象
	//通过configuration对象来配置文件系统
	private static Configuration config = null;
	//文件操作系统对象
	private static FileSystem fs = null;
	//操作hdfs的用户
	private static final String HDFS_USER = "hadoop";
	//hdfs服务地址 ip或机器名加端口号
	private static final String HDFS_URL = "hdfs://192.168.1.124:9000";
	//获取配置参数configuration对象,此对象会对xxx-site.xml文件进行解析
	config = new Configuration();
	//设置服务器操作地址
	config.set("fs.defaultFS", HDFS_URL);
	//获取一个HDFS文件系统客户端实例化对象
	//产生的实例究竟是哪一个文件系统的客户端,是根据conf相关参数来决定的
	fs = FileSystem.get(new URI(HDFS_URL), config, HDFS_USER);
3) 操作方法	
	//上传文件
	fs.copyFromLocalFile(new Path("D:\\hadoop-test-file\\aaa.data"), new Path("/1806A/1806A.txt"));
	//删除
	.delete(new Path("/aaa"), true);
	//创建文件夹
	.mkdirs(new Path("/111/2222/aaa"));
	//重命名
	.rename(new Path("/123"), new Path("/321"));
	//下载
	.copyToLocalFile(new Path("/1806A/1806A.txt"), new Path("d:/"));
	//遍历文件
	RemoteIterator<LocatedFileStatus> listFiles = HdfsClient.getHadoopFileSystem()
                .listFiles(new Path("/"), true);
	while (listFiles.hasNext()){
		LocatedFileStatus file = listFiles.next();
		System.out.println(file.getPath().getName());
	}
	//遍历文件夹和文件
	FileStatus[] fileArr = HdfsClient.getHadoopFileSystem()
                .listStatus(new Path("/wc/output"));
	for(FileStatus file : fileArr){
		System.out.println(file.getPath().getName() + "--" + (file.isDirectory() ? "dir" : "file"));
	}
	
	//io流方式上传文件
	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String dateStr = sdf.format(new Date()).toString();
    String filename = System.currentTimeMillis() + ".txt";
    FSDataOutputStream fos = null;
    FileInputStream fis = null;
    try {
        // 文件保存在服务器上地址
        fos = HdfsClient.getHdfsFileSystem()
                .create(new Path("/jk/" + dateStr + "/" + filename));

        // 用户上传的文件
        fis = new FileInputStream(new File("D:\\hadoop-test-file\\1810B.txt"));
        IOUtils.copyBytes(fis, fos, 4096, false);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        IOUtils.closeStream(fis);
        IOUtils.closeStream(fos);

    }
	
	//io流方式从hdfs上下载文件
	FSDataInputStream inputStream = null;
    try {
        inputStream = HdfsClient.getHdfsFileSystem()
                .open(new Path("/jk/1810b/1810B.txt"));
        IOUtils.copyBytes(inputStream, System.out, 4096, false);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        IOUtils.closeStream(inputStream);
    }

28、javaAPI自定义MapReduce程序

1) 新建Map测试类继承Mapper<LongWritable, Text, Text, LongWritable>

2) 重写map方法
	// 获取文件内容
    String content = value.toString();
    // 将内容按空格分隔存入map集合当中
    String[] contentArr = StringUtils.split(content, ' ');
    for (String word : contentArr) {
        // 将map集合写入reduce中
        context.write(new Text(word), new LongWritable(1));
    }

3) 新建Reduce类继承Reducer<Text, LongWritable, Text, LongWritable>

4) 重写reduce方法
	// 遍历map的value
    Iterator<LongWritable> iterator = values.iterator();

    // 定义计数器
    Long count = new Long(0);

    // 循环value值
    while (iterator.hasNext()) {
        // 获取value值
        LongWritable longWritable = iterator.next();
        // 相同的key进行累加操作
        count += longWritable.get();
    }
    context.write(key, new LongWritable(count));

5) 编写启动类
	Configuration config = new Configuration();
    Job job = Job.getInstance(config);
    // 设置启动类
    job.setJarByClass(MapReduceRunner.class);
    // 设置Map类
    job.setMapperClass(MapTest.class);
    // 设置Reduce类
    job.setReducerClass(ReduceTest.class);
    // 设置输出的key也就是统计的关键词
    job.setOutputKeyClass(Text.class);
    // 设置输出的value也就是统计关键词的数量
    job.setOutputValueClass(LongWritable.class);
    // 设置MapReduce计算的文件
    FileInputFormat.setInputPaths(job, "/jk/1810b/1810B.txt");
    // 设置MapReduce计算完后的文件输出文件
    // 注意:输出的目录不要存在
    FileOutputFormat.setOutputPath(job, new Path("/jk/output"));
    job.waitForCompletion(true);

6) 将启动类打jar包,上传到服务器
	执行命令:hadoop jar jar包名 包路径.启动类名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值