Linux环境
虚拟机一台:192.168.100.129
虚拟机安装centos7,我使用的是NAT联网模式 ,设置的本地ip
修改主机名
hostnamectl set-hostname centos7_master 这个名字你自定义,只要保证后续 /etc/hosts文件和 hbase配置文件中保持一致就可以
配置下免密登录
ssh-keygen -t rsa -P '' 狂摁回车键,然后复制生成的秘钥文件到authorized_keys
cp /root/.ssh/id_rsa.pub authorized_keys
解压 zookeeper3.4.14.tar.gz hadoop-2.7.7.tar.gz hbase-1.1.3.tar.gz至 /usr/local/目录下,mv 指令 修改文件夹名称
配置下环境变量:jdk环境这个自己安装下吧
#jdk环境配置 export JAVA_HOME=/usr/local/environment/java/jdk1.8 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
#hadoop环境 export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH export HADOOP_CLASSPATH=/software/hadoop/lib
#hbase环境
export HBASE_HOME=/usr/local/hbase export HBASE_CONF_DIR=/usr/local/hbase/conf export PATH=$PATH:$HBASE_HOME/bin
在 /usr/local/zookeeper/conf 文件夹下 复制 zoo_sample.cfg ,cp zoo_sample.cfg zoo.cfg 后 修改 zoo.cfg文件,zookeeper就搭建好了
进入 /usr/local/hadoop/etc/hadoop 文件夹,这几个文件要修改
core-site.xml
<configuration>
<property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <!--指定tmp目录,防止默认的tmp目录被删除--> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadoopTmpDir</value> </property> </configuration>
hfds-site.xml
<configuration>
<property> <name>dfs.name.dir</name> <value>/usr/local/hadoop/dfs/name</value> <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description> </property> <property> <name>dfs.data.dir</name> <value>/usr/local/hadoop/dfs/data</value> <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> <description>need not permissions</description> </property>
</configuration>
hadoop-env.sh 添加
export JAVA_HOME=/usr/local/environment/java/jdk1.8 export HADOOP_HOME=/usr/local/hadoop
mapred-site.xml
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:54311</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>localhost:8025</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>localhost:8030</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>localhost:8050</value> </property>
</configuration>
vim hadoop/sbin/start-dfs.sh 文件开头添加
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
vim hadoop/sbin/stop-dfs.sh 文件开头添加
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
vim hadoop/sbin/start-yarn.sh 文件开头添加
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
vim /hadoop/sbin/stop-yarn.sh 文件开头添加
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
以上,hadoop基本上就搞完了
进入 /usr/local/hbase/conf 目录
cp xxx/zookeeper/conf/zoo.cfg . 复制zookeeper的 zoo.cfg文件到当前目录
hbase-env.sh 添加
export JAVA_HOME=/usr/local/environment/java/jdk1.8 export HBASE_CLASSPATH=/usr/local/hbase/conf export HBASE_PID_DIR=/var/hadoop/pids export HBASE_MANAGES_ZK=false #不使用HBase自带的zookeeper
hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>localhost</value> </property> <property> <name>hbase.zookeeper.property.cientPort</name> <value>2181</value> </property> <property> <name>hbase.tmp.dir</name> <value>/var/hbase/</value> </property> <property> <name>hbase.master</name> <value>localhost:60000</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/usr/local/hbase/zookeeper</value> </property> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> </property> </configuration>
本地测试下吧
public static Connection initHbase() throws Exception{ Configuration configuration = HBaseConfiguration.create(); configuration.set("hbase.zookeeper.property.clientPort","2181"); configuration.set("hbase.zookeeper.quorum","192.168.110.129"); configuration.set("hbase.master","192.168.110.129:60000"); Connection connection = ConnectionFactory.createConnection(configuration); return connection; } public static void createTable(String tableName,String[] cols) throws Exception{ TableName tableName1 = TableName.valueOf(tableName); admin = initHbase().getAdmin(); if(admin.tableExists(tableName1)){ }else { HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName); for(String col:cols){ HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(col); hTableDescriptor.addFamily(hColumnDescriptor); } } } public static void insertData(String tableName, User user) throws Exception{ TableName tablename1 = TableName.valueOf(tableName); Put put = new Put(("user"+user.getId()).getBytes()); //参数:1列族名 2列名 3值 put.addColumn("information".getBytes(),"username".getBytes(),user.getUsername().getBytes()); put.addColumn("information".getBytes(),"age".getBytes(),user.getAge().getBytes()); put.addColumn("information".getBytes(),"gender".getBytes(),user.getGender().getBytes()); put.addColumn("information".getBytes(),"phone".getBytes(),user.getPhone().getBytes()); put.addColumn("information".getBytes(),"email".getBytes(),user.getEmail().getBytes()); Table table = initHbase().getTable(tablename1); table.put(put); } public static List<User> getAllData(String tableName)throws Exception{ Table table = null; List<User> list = new ArrayList<User>(); try { table = initHbase().getTable(TableName.valueOf(tableName)); ResultScanner results = table.getScanner(new Scan()); User user = null; for (Result result : results){ String id = new String(result.getRow()); System.out.println("用户名:" + new String(result.getRow())); user = new User(); for(Cell cell : result.rawCells()){ String row = Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength()); //String family = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength()); String colName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength()); String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); user.setId(row); if(colName.equals("username")){ user.setUsername(value); } if(colName.equals("age")){ user.setAge(value); } if (colName.equals("gender")){ user.setGender(value); } if (colName.equals("phone")){ user.setPhone(value); } if (colName.equals("email")){ user.setEmail(value); } } list.add(user); } } catch (IOException e) { e.printStackTrace(); } return list; } public static void main(String[] args) { try { createTable("user_table", new String[] { "information", "contact" }); User user = new User("001", "xiaoming", "123456", "man", "20", "13355550021", "1232821@csdn.com"); insertData("user_table", user); User user2 = new User("002", "xiaohong", "654321", "female", "18", "18757912212", "214214@csdn.com"); insertData("user_table", user2); List<User> list = getAllData("user_table"); System.out.println("--------------------插入两条数据后--------------------"); for (User user3 : list){ System.out.println(user3.toString()); } } catch (Exception e) { e.printStackTrace(); } }
参考: https://blog.csdn.net/qq_39680564/article/details/90673700
如果报 org.apache.hadoop.hbase.client.RetriesExhaustedException 参考 :https://blog.csdn.net/chen798213337/article/details/51957693