点击【创建新的虚拟机】→ 【自定义安装】→ 【下一步】→ 【稍后安装操作系统(S)】→【Linux(L)】→ 【输入虚拟机名称,选择安装位置】→ 【下一步】→ 【使用网络地址转换(NAT)(E)】→ 【LSI Logic(L)】点击【下一步】→ 【SCSI(S)】→ 【创建新虚拟磁盘】→ 【将虚拟磁盘拆分成多个文件(M)】→ 选择【自定义硬件】,点击【浏览】输入安装文件的路径 → 点击【完成】,开启虚拟机。然后选择虚拟机的语言,网络与主机名记录下来,设置登录密码,开始安装虚拟机。
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端口成功则伪分布式完成。
步骤: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(); } }
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包之后,在虚拟机上运行。
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数据库
①创建表
②添加数据
③查看数据
④删除数据
⑤删除表
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/
1.下载Hive,解压安装
2.Hive配置环境变量
export HIVE_HOME=/opt/module/apache-hive-3.1.1-bin export PATH=$PATH:$HIVE_HOME/bin123.修改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 restart15.配置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;12345676.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}/${system:user.name},原因是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>
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/scala2.下载安装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=1g3.新建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 sbt6.运行sbt:
安装sbt成功:CTRL+C退出sbt 回到root目录,创建一个文件夹test
创建WordCount.scala;
创建word-count.sbt;
执行打包;
打开test02, part-00000文件即是程序的输出文件。