大数据技术(实验)

实验一

一、下载安装Vmware Workstation Pro 12

二、安装CentOS

点击【创建新的虚拟机】→ 【自定义安装】→ 【下一步】→ 【稍后安装操作系统(S)】→【Linux(L)】→  【输入虚拟机名称,选择安装位置】→ 【下一步】→ 【使用网络地址转换(NAT)(E)】→ 【LSI Logic(L)】点击【下一步】→ 【SCSI(S)】→ 【创建新虚拟磁盘】→ 【将虚拟磁盘拆分成多个文件(M)】→ 选择【自定义硬件】,点击【浏览】输入安装文件的路径 → 点击【完成】,开启虚拟机。然后选择虚拟机的语言,网络与主机名记录下来,设置登录密码,开始安装虚拟机。

三、安装配置Hadoop

1、开启虚拟机,首先关闭防火墙。将jdk和hadoop压缩包传入虚拟机,解压。

2、配置jdk:

vi /etc/profile文件添加:

export JAVA_HOME=/opt/module/jdk1.8.0_121

export PATH=$JAVA_HOME/bin:$PATH

Esc :wq!保存并退出。不需要配置CLA:SSPATH。

source /etc/profile配置生效

运行命令javac,检验是否成功。

3、配置HADOOP并生效

vi /etc/profile文件添加:

export HADOOP_HOME=/opt/module/hadoop-2.7.3

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

Esc :wq!保存并退出。

source /etc/profile配置生效。

4、Hadoop伪分布式

修改配置文件:

①core-site.xml

<!--配置HDFS主节点,namenode的地址,9000是RPC通信端口-->

<property>

        <name>fs.defaultFS</name>

        <value>hdfs://bigdata128:9000</value>

</property>

<!--配置HDFS数据块和元数据保存的目录,一定要修改-->

<property>

        <name>hadoop.tmp.dir</name>

        <value>/opt/module/hadoop-2.7.3/tmp</value>

</property>

②core-site.xml

<!--注释配置数据块的冗余度,默认是3-->  

<property>  

     <name>dfs.replication</name>  

     <value>1</value>  

</property>

<!--secondaryNameNode的主机地址--> 

<property>

         <name>dfs.namenode.secondary.http-address</name>

         <value>bigdata128:50090</value>

</property>

③mapred-site.xml(该配置文件不存在,先复制)

cp  mapred-site.xml.template  mapred-site.xml  

<!--配置MR程序运行的框架-->  

<property>  

  <name>mapreduce.framework.name</name>

  <value>yarn</value>

</property>  

④yarn-site.xml

<!--配置Yarn的节点-->  

<property>  

  <name>yarn.resourcemanager.hostname</name>

  <value>bigdata128</value>

</property>  

<!--NodeManager执行MR任务的方式是Shuffle洗牌-->  

<property>  

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>  

⑤Slaves文件里使用默认localhost,或者添加 bigdata128(既是NameNode又是DataNode)

注:如果Slaves文件为空,就没有DataNode和NodeManager。

⑥修改\etc\hosts配置文件

运行命令  vi  \etc  hosts

注释掉已有内容,添加虚拟机的ip及对应主机名:

192.168.163.128  bigdata128

⑦修改\etc\配置文件

运行命令  vi  \etc  hostname

添加虚拟机的主机名:

bigdata128

重启虚拟机,主机名生效。

格式化:hdfs namenode -format

启动名称节点和数据节点:start-all.sh

访问50070和8088端口成功则伪分布式完成。

5、完全分布式

修改配置文件:

①slaves配置文件

三台虚拟机分别都运行命令  vi  /opt/module/hadoop-2.7.3/etc/hadoop  slaves

修改slaves为:

bigdata129

bigdata131

②修改\etc\hosts配置文件

三台虚拟机分别都运行命令  vi  \etc  hosts

注释已有内容,添加集群三台虚拟机的ip及对应主机名:

192.168.163.128  bigdata128

192.168.163.129  bigdata129

192.168.163.131  bigdata131

③修改\etc\hostname配置文件

三台虚拟机分别都运行命令  vi  \etc  hostname

添加各自的主机名bigdata128或者bigdata129或者bigdata131。

重启全部虚拟机,主机名生效。

格式化:

在主节点bigdata128上面输入格式化命令(hdfs namenode -format),格式化集群。

注:如果不是第一次格式化,三台虚拟机都删除\opt\module\hadoop-2.7.3\下面的tmp、logs目录:rm –rf \opt\module\hadoop-2.7.3\tmp    rm –rf \opt\module\hadoop-2.7.3\logs

注:如果格式化之前启动过集群,先在主节点bigdata128上面停止集群(stop-all.sh),再格式化。

启动集群:

在主节点bigdata128上面输入启动命令(start-all.sh),启动集群。

访问50070和8088端口成功则伪分布式完成。

 

实验二

使用Hadoop和Java API实现文件的读写

步骤:1.安装JDK→2.安装Eclipse→3.安装Maven→4. Eclipse里配置Maven (下载Windows版本,在Windows里安装使用。)

1、新建HDFS目录/aadir,写入/上传 本地文件e:\\hdfs\\aa.txt 到HDFS的/aadir目录下,查看HDFS文件/bb.txt是否存在。

package hdfs.files;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSMkdir{
	private static InputStream input;
	private static OutputStream output;
	
		public static void main(String[] args) throws IOException{
			System.setProperty("HADOOP_USER_NAME","root");
			Configuration conf=new Configuration();
			conf.set("fs.defaultFS","hdfs://192.168.43.230:9000");
			FileSystem client=FileSystem.get(conf);
			client.mkdirs(new Path("/aadir"));
			client.mkdirs(new Path("/bb.txt"));
			
			
			input = new FileInputStream("E:\\hdfs\\aa.txt");
			output =client.create(new Path("/aadir/aaout.txt"));

			output =new FileOutputStream("E:\\hdfs\\bbout.txt");
	    	input =client.open(new Path("/bb.txt"));
	    	
			byte[] buffer=new byte[1024];int len=0;
		      while((len= input.read(buffer))!=-1) {
		      output.write(buffer,0,len);
		      }
		      output.flush();
		      input.close();
		      output.close();
		      
		      
			System.out.println("successfully!");
			
			String fileName="/bb.txt";
			if(client.exists(new Path(fileName))) {
				System.out.println("文件存在! ");
				}
			else 
				{
					System.out.println("文件不存在! ");
				}
		
			
	        
		}
	}

2、读/下载 HDFS的根目录文件/bb.txt 到本地e:\\hdfs目录下。

import java.io.FileOutputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


public class HDFSDownload {
	private static InputStream input;
	private static OutputStream output;
    public static void main(String[] args) throws IOException{
    	System.setProperty("HADOOP_USER_NAME", "root");
    	Configuration conf=new Configuration();
    	conf.set("fs.defaultFS", "hdfs://bigdata128:9000");
    	FileSystem client=FileSystem.get(conf);
    	output =new FileOutputStream("E:\\hdfs\\bbout.txt");
    	input =client.open(new Path("/bb.txt"));
    	byte[] buffer=new byte[1024];
    	int len=0;
        while((len=input.read(buffer))!=-1) {
        	output.write(buffer,0,len);
        }
        output.flush();
        input.close();
        output.close();
    }
}

 

实验三

启动自带MapReduce实例程序WordCount

Map处理 :public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>

Reduce处理: public class WordCountReducer extends Reducer <Text, IntWritable, Text, IntWritable>

Job配置: public class WordCountDriver  //关联使用的Mapper类
                  job.setMapperClass(WordCountMapper.class);  //关联使用的Reducer类

                 job.setReducerClass(WordCountReducer.class);

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
   //对数据进行打散
 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
   //输入数据 hello world love work
   String line = value.toString();
   //对数据切分
   String[] words=line.split(" ");
   //写出<hello, 1>
   for(String w:words) {
   //写出reducer端
   context.write(new Text(w), new IntWritable(1));
}}}
public class WordCountReducer extends Reducer <Text, IntWritable, Text, IntWritable>{
  protected void reduce(Text Key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
    //记录出现的次数
    int sum=0;
    //累加求和输出
    for(IntWritable v:values) {
      sum +=v.get();
    }
    context.write(Key, new IntWritable(sum));
 }
}
public class WordCountDriver {
 public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException {
  // 设置root权限
  System.setProperty("HADOOP_USER_NAME", "root");
  //创建job任务
  Configuration conf=new Configuration();
  Job job=Job.getInstance(conf);
  //指定jar包位置
  job.setJarByClass(WordCountDriver.class);
//关联使用的Mapper类
 job.setMapperClass(WordCountMapper.class);
 //关联使用的Reducer类
 job.setReducerClass(WordCountReducer.class);
 //设置Mapper阶段输出的数据类型
 job.setMapOutputKeyClass(Text.class);
 job.setMapOutputValueClass(IntWritable.class);
 //设置Reducer阶段输出的数据类型
 job.setOutputKeyClass(Text.class);
 job.setOutputValueClass(IntWritable.class);
//设置数据输入路径和文件名
 FileInputFormat.setInputPaths(job, new Path("c:\\in\\aa.txt"));
 //设置数据输出路径
 FileOutputFormat.setOutputPath(job, new Path("c:\\out"));
 //提交任务
 Boolean rs=job.waitForCompletion(true);
 //退出
System.exit(rs?0:1);
 }
}

生成jar包之后,在虚拟机上运行。

 

实验四

安装并配置Hbase,使用Hbase的Java API实现简单的CRUD操作

1.HBase安装配置

①下载压缩包(选择与自己安装的Hadoop版本的兼容版本,见后面附录)

官网下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/ 

选择稳定版hbase-1.4.9-bin.tar.gz,在Windows里面下载。

②将压缩包从Windows传输到Linux当前目录下

SecureCRT 【File】→【Connect SFTP Session】开启sftp操作

③安装

解压安装到指定目录下/opt/module(/opt是系统自带目录,之下的/module是自己创建的)

④配置环境变量

在/etc/profile文件里添加HBase安装路径的配置信息,之后用source命令使配置生效。

2.HBase配置(伪分布式模式)

配置文件位于HBase安装路径的conf目录(/opt/module/hbase/conf)下面

①配置hbase-env.sh

设置Java安装路径 

设置HBase的配置文件路径(/opt/module/hbase/conf)

采用HBase自带Zookeeper,设置参数true

②配置hbase-site.xml

<!--hbase共享目录,持久化hbase数据-->

<!--配置为core-site.xml 中的fs.defaultFS -->

<property>

        <name>hbase.rootdir</name>

        <value>hdfs://bigdata128:9000/hbase</value>

</property>

<!--分布式运行模式,false(默认)为单机模式-->

<property>

        <name>hbase.cluster.distributed</name>

        <value>true</value>

</property>

 

<!--Zookeeper集群的地址列表,伪分布式用默认localhost-->

<property>

        <name>hbase.zookeeper.quorum</name>

        <value>localhost</value>

</property>

③启动并运行HBase(之前启动Hadoop)

启动HBase,并jps查看。

3.进入HBase数据库

①创建表

②添加数据

③查看数据

④删除数据

⑤删除表

 

实验五

安装Redis、MangoDB了解其基本操作

1.下载安装redis

下载:wget http://download.redis.io/releases/redis-5.0.4.tar.gz

解压:tar -zxvf redis-5.0.4.tar.gz

安装gcc使用make命令:make install安装redis

启动redis:./redis-server

2.redis连接配置redis.conf文件
1.cd ..(redis.conf文件默认在redis安装根目录下)
2.vi redis.conf

[1] daemonize yes(no改为yes)

[2]protected-mode no(yes改为no) 

[3]requirepass foobared(将foobared改为自己的密码,并且删除前面”#“,例如:我的密码时“111111”}
[4]bind 自己虚拟机的IP

 

MongoDB下载安装:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

 

实验六

安装配置Hive、MySQL以及JDBC驱动

1.下载Hive,解压安装

2.Hive配置环境变量

export HIVE_HOME=/opt/module/apache-hive-3.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin12

3.修改Hive的hive-env.sh文件

export JAVA_HOME=/usr/java    ##Java路径
export HADOOP_HOME=/usr/local/hadoop   ##Hadoop安装路径
export HIVE_HOME=/usr/local/hive    ##Hive安装路径
export HIVE_CONF_DIR=/usr/local/hive/conf    ##Hive配置文件路径

4.下载安装MySQL

下载安装:

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm1
rpm -ivh mysql-community-release-el7-5.noarch.rpm1
yum install mysql-server1

设置密码:

mysql -u root1

重启MySQL服务:

service mysqld restart1

5.配置JDBC驱动

将MySQL的JDBC驱动 mysql-connector-java-5.1.43.jar添加到HIVE_HOME/lib 目录下。

6.Hive Metastore配置

6.1.创建数据库和用户

假定你已经安装好 MySQL。下面创建一个 hive 数据库用来存储 Hive 元数据,且数据库访问的用户名和密码都为 hive。

mysql> CREATE DATABASE hive; 
mysql> USE hive; 
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive'; 
mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive'; 
mysql> FLUSH PRIVILEGES; 
mysql> quit;1234567

6.2.修改hive-site.xml

进入/opt/module/hive/conf目录,修改default.xml.template的文件名为hive-site.xml。(可以使用cp或者mv命令)

cp hive- default.xml.template  hive-site.xml

在最后添加以下属性:

<property>
<!-- 元数据库的链接地址 mysql -->
       <name>javax.jdo.option.ConnectionURL</name>         
<value>jdbc:mysql://bigdata131:3306/hivedb?createDatabaseIfNotExist=true</value>
       <description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<!-- 指定mysql驱动 -->
<!-- mysql5的驱动是com.mysql.jdbc.Driver,mysql6以后的是com.mysql.cj.jdbc.Driver。 --> 
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
</property>
<property>
<!-- 指定mysql用户名 -->
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>username to use against metastore database</description>                    
</property>
<property>
<!-- 指定mysql密码 请输入自己的MySQL连接密码 -->
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
        <description>password to use against metastore database</description>
</property>

注:
查看Hive建库、建表默认的hdfs目录为/user/hive/warehouse
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>

7.启动Hive

①启动Hadoop:start-all.sh

②初始化Metastore架构:schematool -dbType mysql -initSchema

③启动Hive:hive

hive> 进入hive shell

④创建/删除/修改/查看 数据库、表、视图,向表中装载数据,查询数据等等。

注:

①启动hive报错:Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D,原因是hive-site.xml里的临时目录没有设置好。

修改${system:Java.io.tmpdir}为自己创建的临时目录/opt/module/hive/tmp。

<property> 
<name>Hive.exec.local.scratchdir</name> <value>${system:Java.io.tmpdir}/${system:user.name}</value> 
<description>Local scratch space for Hive jobs</description> 
</property>
<property> 
<name>hive.downloaded.resources.dir</name> <value>${system:java.io.tmpdir}/${hive.session.id}_resources</value> 
<description>Temporary local directory for added resources in the remote file system.</description> 
</property>
<property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>${system:java.io.tmpdir}/${system:user.name}/operation_logs</value>
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
<property>
    <name>hive.querylog.location</name>
    <value>${system:java.io.tmpdir}/${system:user.name}</value>
    <description>Location of Hive run time structured log file</description>
  </property>

 

实验七

安装配置Spark以及Scala语言环境,分别使用Spark语言和Scala语言编写WordCount程序

1.下载安装Scala

下载后解压,在/etc/profile文件中加入安装路径:

export SCALA_HOME=/usr/local/scala/scala-2.12.8

export PATH=$PATH:$SCALA_HOME/bin 

在每一个节点上都安装配置scalar,安装完后发送给slave1、slave2:
 

scp -r /usr/local/scala/scala-2.12.8 root @slave1:/usr/local/scala

scp -r /usr/local/scala/scala-2.12.8 root @slave2:/usr/local/scala 

2.下载安装Spark

下载:http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz

 安装解压到以下路径

 /usr/local/spark

编辑/etc/profile文件,增加:

export SPARK_HOME=/usr/local/spark/spark-2.4.2-bin-hadoop2.7

export PATH=$PATH:$SPARK_HOME/bin  

生效:source /etc/profile

2.修改spark-env.sh文件

#Java环境变量
export JAVA_HOME=/opt/module/jdk1.8.0_121
#Scala环境变量
export SCALA_HOME=/usr/local/scala
#Hadoop环境变量
export HADOOP_HOME=/opt/module/hadoop-2.7.3/
    
#定义管理端口
export SPARK_MASTER_WEBUI_PORT=8080
#定义master域名和端口
export SPARK_MASTER_HOST=spark-master
export SPARK_MASTER_PORT=7077
#定义master的地址slave节点使用
export SPARK_MASTER_IP=spark-master
#定义work节点的管理端口.work节点使用
export SPARK_WORKER_WEBUI_PORT=8080
#每个worker节点能够最大分配给exectors的内存大小 
export SPARK_WORKER_MEMORY=1g

3.新建slaves文件: 

cp    slaves.template   slaves

 将slaves文件修改为:


slaver1
slaver2

配置完成,分发给其他节点,并且完成/etc/profile文件的配置 :

scp -r /usr/local/spark/spark-2.4.2 root @slave1:/usr/local/spark

scp -r /usr/local/spark/spark-2.4.2 root @slave2:/usr/local/spark

启动spark:./sbin/start-all.sh

4.执行 spark-shell

4.1.加载本地文件(“file:///opt/module/code/wordcount/word.txt")centos7系统中必须存在该文件。

scala>val textFile = sc.textFile("file:///opt/module/code/wordcount/word.txt") 

scala>textFile.first() 

4.2.读取hdfs中文件(/user/root/word.txt hdfs中必须存在,若不存在则手动创建)

val textFile = sc.textFile("hdfs://bigdata128:9000/user/root/word.txt")
textFile.first()

4.3.词频统计:

val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)

wordCount.collect()

5.安装sbt打包:

下载安装:https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo

mv bintray-sbt-rpm.repo /etc/yum.repos.d/

yum install sbt

6.运行sbt: 

安装sbt成功:CTRL+C退出sbt
回到root目录,创建一个文件夹test

创建WordCount.scala;

创建word-count.sbt;

执行打包;

打开test02, part-00000文件即是程序的输出文件。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值