精华内容
下载资源
问答
  • SpringBoot --集成HBASE/基于SpringDataHadoop

    万次阅读 2017-02-27 10:16:30
    前置工作 Hadoop安装配置 : hadoop-2.7.3 Hbase安装配置: hbase-1.2.4 ... hbase-client中guava版本与SpringDataHadoop(2.4.0.RELEASE)版本中的guava版本问题 Springboot的其他章节,需要了解 Hostname 绑定

    前置工作

    • Hadoop安装配置 : hadoop-2.7.3
    • Hbase安装配置: hbase-1.2.4
    • zookeeper安装配置: zookeeper-3.4.9
    • hbase-client中guava版本与SpringDataHadoop(2.4.0.RELEASE)版本中的guava版本问题
    • Springboot的其他章节,需要了解
    • Hostname 绑定
    • hadoop home问题,配置HADOOP_HOME
    • 测试时程序内指定 hadoop.home.dir:System.setProperty(“hadoop.home.dir”, “D:\\dev_evn\\hadoop-2.7.3”);

    Hadoop基础依赖包

    • 因为hbase-client中guava(12.1)版本与SpringDataHadoop版本中的guava(18.0)版本冲突
      所以做了依赖基础包,目前可用;思路来自于ElasticSearch官方解决方案

    创建hadoop-base-bootcwenao moudle

    引入相关依赖

    build.gradle

    apply plugin: 'org.springframework.boot'
    
    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:" + springCloudVersion
            mavenBom "org.springframework.boot:spring-boot-starter:"+ springBootVersion
        }
    }
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile ('org.springframework.data:spring-data-hadoop:'+ springDataHadoopVersion)
        compile ('org.apache.hadoop:hadoop-common:'+hadoopVersion)
    }
    configurations {
        all*.exclude module: 'spring-boot-starter-logging'
        all*.exclude module: 'logback-classic'
        all*.exclude module: 'log4j-over-slf4j'
        all*.exclude module: 'slf4j-log4j12'
        all*.exclude module: 'snappy-java'
    }
    jar {
        baseName = 'hadoop-base-bootcwenao'
    }

    创建main入口(很重要)

    HadoopBaseApplication.java

    /**
     * @author cwenao
     * @version $Id HadoopBaseApplication.java, v 0.1 2017-02-23 13:51 cwenao Exp $$
     */
    public class HadoopBaseApplication {
        public static void main(String[] args) {
    
        }
    }
    

    创建 BigData module

    引入hbase-client,排除servlet-api、guava:18.0,引入hadoop基础依赖包hadoop-base-bootcwenao

    dependencies {
    
        compile project(':hadoop-base-bootcwenao')
    
        compile ('org.springframework.data:spring-data-redis')
    
        compile ('org.springframework.boot:spring-boot-starter-data-mongodb:'+springBootVersion)
        compile ('org.apache.hbase:hbase-client:'+hbaseClientVersion)
        compile ('org.springframework.boot:spring-boot-starter-web:'+springBootVersion)
        compile('org.springframework.cloud:spring-cloud-starter-eureka')
        compile ('mysql:mysql-connector-java:'+mysqlVersion)
        compile ('com.alibaba:druid:'+druidVersion)
        compile ('org.mybatis:mybatis-spring:'+mybatisSpringBootVersion)
        compile ('org.mybatis:mybatis:'+mybatisVersion)
        compile('org.springframework.boot:spring-boot-starter-log4j2')
        compile ('org.springframework.boot:spring-boot-starter-thymeleaf')
        compile ('net.sourceforge.nekohtml:nekohtml:'+nekoHtmlVersion)
        compile('org.apache.logging.log4j:log4j-1.2-api:'+ log4jAPIVersion)
        /*compile('org.springframework.boot:spring-boot-starter-jdbc')*/
        compile('org.springframework.boot:spring-boot-starter-aop')
        compile ('com.alibaba:fastjson:'+fastjsonVersion)
        compile ('redis.clients:jedis')
        compile ('com.google.guava:guava:12.0.1')
    
        testCompile ('org.springframework.boot:spring-boot-starter-test')
        testCompile group: 'junit', name: 'junit', version: '4.11'
    }
    
    
    configurations {
        all*.exclude module: 'spring-boot-starter-logging'
        all*.exclude module: 'servlet-api'
        all*.exclude group: 'com.google.guava', module: 'guava:18.0'
        all*.exclude module: 'logback-classic'
        all*.exclude module: 'log4j-over-slf4j'
        all*.exclude module: 'slf4j-log4j12'
        all*.exclude module: 'snappy-java'
    }

    创建hbase资源文件hbase.properties

    hbase.zk.host=127.0.0.1
    hbase.zk.port=2181

    创建hbase-spring.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:hdp="http://www.springframework.org/schema/hadoop"
           xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd">
    
        <context:property-placeholder location="classpath:/config/hbase.properties"/>
    
        <hdp:configuration id="hadoopConfiguration">
            fs.defaultFS=hdfs://127.0.0.112:9000
        </hdp:configuration>
    
        <hdp:hbase-configuration configuration-ref="hadoopConfiguration" zk-quorum="${hbase.zk.host}" zk-port="${hbase.zk.port}" delete-connection="true"/>
    
        <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate">
            <property name="configuration" ref="hbaseConfiguration"/>
        </bean>
    
    </beans>

    使用@ImportResource导入xml

    /**
     * @author cwenao
     * @version $Id BigDataApplication.java, v 0.1 2017-02-21 22:38 cwenao Exp $$
     */
    @SpringBootApplication
    @EnableDiscoveryClient
    @ImportResource(locations = {"classpath:/config/hbase-spring.xml"})
    public class BigDataApplication {
        public static void main(String[] args) {
            System.setProperty("hadoop.home.dir", "D:\\\\dev_evn\\\\hadoop-2.7.3");
            SpringApplication.run(BigDataApplication.class, args);
        }
    }

    配置 mongodb、thymeleaf、redis、eureka等

    application.yml

    server:
      port: 8686
    eureka:
      instance:
        hostname: bigdataserver
        prefer-ip-address: true
      client:
        registerWithEureka: true
        fetchRegistry: true
        service-url:
          defaultZone: http://aa:abcd@localhost:8761/eureka/
    spring:
      thymeleaf:
        cache: false
        mode: LEGACYHTML5
        prefix: classpath:/web/
        suffix: .html
        content-type: text/html
      redis:
        host: 127.0.0.1
        port: 6379
        password: password
        timeout: 5000
        pool:
          max-idle: 8
          min-idle: 0
          max-active: 8
          max-wait: -1
      data:
        mongodb:
          uri: mongodb://username:password@127.0.0.1:27017/kakme:27017/kakme

    bootstrap.yml

    spring:
      application:
        name: bigdataserver
      aop:
        auto: true
      cloud:
        stream:
          kafka:
            binder:
              brokers: 127.0.0.1:9092
              zk-nodes: 127.0.0.1:2181
    logging:
      config: classpath:log4j2-spring.xml

    配置Hostname(重要)

    • hbase需要zk,而zk在在hbase服务端返回的时候返回的是hostname
    • 所以需要将服务端的hostname,在本地也进行一次绑定
    • windowns下hosts中配置: xxx.xx.xx.xxx master, xxx.xx.xx.xxx为服务器端地址

    创建查询方法

    • 如果只是测试或者不嫌麻烦可以用hbaseTemplate一个个写
    • 比较懒所以扩展了下,思想来自于网络大神

    创建HbaseFindBuilder.java

    HbaseFindBuilder.java

    /**
     * Company
     * Copyright (C) 2014-2017 All Rights Reserved.
     */
    package com.bootcwenao.bigdataserver.hbase.handler;
    
    import com.bootcwenao.bigdataserver.utils.HumpNameOrMethodUtils;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.BeanWrapper;
    import org.springframework.beans.PropertyAccessorFactory;
    import org.springframework.util.CollectionUtils;
    import org.springframework.util.StringUtils;
    
    import java.beans.PropertyDescriptor;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 按qualifier返回结果
     * @author cwenao
     * @version $Id HbaseFindBuilder.java, v 0.1 2017-02-20 16:05 cwenao Exp $$
     */
    public class HbaseFindBuilder<T> {
    
        private String family;
    
        private Result result;
    
        private String qualifier;
    
        private Map<String, PropertyDescriptor> fieldsMap;
    
        private Set<String> propertiesSet;
    
        private Set<String> qualifierSet;
    
        private BeanWrapper beanWrapper;
    
        private T tBean;
    
        /**
         * 按family查询
         * @param family
         * @param result
         * @param tclazz
         */
        public HbaseFindBuilder(String family, Result result, Class<T> tclazz) {
    
            this.family = family;
            this.result = result;
            fieldsMap = new HashMap();
            propertiesSet = new HashSet<>();
    
            reflectBean(tclazz);
    
        }
    
        /**
         * return the result by qulifier
         * @param qualifier
         * @return
         */
        public HbaseFindBuilder build(String qualifier) {
    
            return this.build(qualifier,"");
        }
    
        /**
         * by multiple qualifier
         * @param qualifiers
         * @return
         */
        public HbaseFindBuilder build(String... qualifiers) {
    
            if (qualifiers == null || qualifiers.length == 0) {
                return this;
            }
            PropertyDescriptor p = null;
            byte[] qualifierByte = null;
    
            for (String qualifier : qualifiers) {
                if (StringUtils.isEmpty(qualifier)) {
                    continue;
                }
                p = fieldsMap.get(qualifier.trim());
                qualifierByte = result.getValue(family.getBytes(), HumpNameOrMethodUtils.humpEntityForVar(qualifier).getBytes());
                if (qualifierByte != null && qualifierByte.length > 0) {
                    beanWrapper.setPropertyValue(p.getName(),Bytes.toString(qualifierByte));
                    propertiesSet.add(p.getName());
                }
            }
    
            return this;
        }
    
        /**
         * by map
         * @param map
         * @return
         */
        public HbaseFindBuilder build(Map<String,String> map) {
    
            if (map == null || map.size() <= 0) {
                return this;
            }
    
            PropertyDescriptor p = null;
            byte[] qualifierByte = null;
    
            for (String value : map.values()) {
                if (StringUtils.isEmpty(value)) {
                    continue;
                }
    
                p = fieldsMap.get(value.trim());
                qualifierByte = result.getValue(family.getBytes(), HumpNameOrMethodUtils.humpEntityForVar(value).getBytes());
    
                if (qualifierByte != null && qualifierByte.length > 0) {
                    beanWrapper.setPropertyValue(p.getName(), Bytes.toString(qualifierByte));
                    propertiesSet.add(p.getName());
                }
            }
    
            return this;
        }
    
        private void reflectBean(Class<T> tclazz) {
    
            tBean = BeanUtils.instantiate(tclazz);
    
            PropertyDescriptor[] propertyDescriptors = BeanUtils.getPropertyDescriptors(tclazz);
    
            for (PropertyDescriptor p : propertyDescriptors) {
                if (p.getWriteMethod() != null) {
                    this.fieldsMap.put(p.getName(), p);
                }
            }
    
            beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(tBean);
        }
    
        public T fetch() {
            if (!CollectionUtils.isEmpty(propertiesSet)) {
                return this.tBean;
            }
            return null;
        }
    }
    

    创建 Bean对应 family

    public class UserInfo {
    
        private String id;
    
        private String userName;
    
        private Integer age;
        //setter getter ......
    }

    创建bean中属性对应 qualifier转换 驼峰命名,hbase中table需要严格按要求

    /**
     * Company
     * Copyright (C) 2014-2017 All Rights Reserved.
     */
    package com.bootcwenao.bigdataserver.utils;
    
    import org.springframework.util.StringUtils;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Locale;
    
    /**
     * Transform the entity attribute hbase column attribute
     * @author cwenao
     * @version $Id HumpNameOrMethodUtils.java, v 0.1 2017-02-20 16:27 cwenao Exp $$
     */
    public class HumpNameOrMethodUtils {
    
        private final static String SEPARATOR_UNDER_SCORE = "_";
    
        /**
         * 用驼峰命名法 将参数转换为Entity属性
         * @param var
         * @return
         */
        public static String humpVarForEntity(String var) {
    
            if (StringUtils.isEmpty(var)) {
                return "";
            }
    
            StringBuffer varBf = new StringBuffer();
    
            var = var.replaceFirst(var.substring(0,1),var.substring(0,1).toLowerCase(Locale.US));
    
            if (var.indexOf(SEPARATOR_UNDER_SCORE) > 0) {
    
                String[] underStr = var.split(SEPARATOR_UNDER_SCORE);
    
                for(int i =0; i<underStr.length;i++) {
    
                    if (i == 0) {
                        varBf.append(underStr[i]);
                    } else {
                        varBf.append(str2LowerCase(underStr[i]));
                    }
                }
            }
    
            return varBf.toString();
        }
    
        /**
         * 用驼峰命名法 将Entity属性转换为参数
         * @param var
         * @return
         */
        public static String humpEntityForVar(String var) {
    
            if (StringUtils.isEmpty(var)) {
                return "";
            }
    
            StringBuffer varBf = new StringBuffer();
    
            char[] varChar = var.toCharArray();
    
            int i = 0;
            for(char c : varChar) {
    
                if (i==0) {
                    varBf.append(String.valueOf(c));
                } else {
                    if (compareToLowerCase(String.valueOf(c))) {
                        varBf.append("_" + String.valueOf(c).toLowerCase());
                    } else {
                        varBf.append(String.valueOf(c));
                    }
                }
                i++;
            }
    
            return varBf.toString();
        }
    
    
        /**
         * 将首位字符转换为大写
         * @param str
         * @return
         */
        private static String str2LowerCase(String str) {
            if (StringUtils.isEmpty(str)) {
                return "";
            }
            return str.replaceFirst(str.substring(0, 1), str.substring(0, 1).toUpperCase());
        }
    
        /**
         * 是否大写字母
         * @param source
         * @return
         */
        private static Boolean compareToLowerCase(String source) {
    
            if (StringUtils.isEmpty(source)) {
                return false;
            }
    
            if (!source.equals(source.toLowerCase(Locale.US))) {
                return true;
            }
            return false;
        }
    }

    调用HbaseFindBuilder

    /**
     * @author cwenao
     * @version $Id HbaseAccountInfoMapperImpl.java, v 0.1 2017-02-21 21:14 cwenao Exp $$
     */
    @Repository("hbaseAccountInfoMapperImpl")
    public class HbaseAccountInfoMapperImpl implements HbaseAccountInfoMapper {
    
     @Autowired
        private HbaseTemplate hbaseTemplate;
    
        public UserInfo findUserInfoByEntity(String table, String family, String rowKey, UserInfo userInfo) {
    
            return (UserInfo) hbaseTemplate.get(table, rowKey, family,
                    (result, rowNum) -> new HbaseFindBuilder<>(family, result, userInfo.getClass()).build("userName","age","id").fetch());
        }
    }

    服务端插入数据


    • 使用hbase shell启用shell操作
    • 使用put插入数据


    • 创建表(‘user’)以及family(‘info’) : create ‘user’,’info’
    • 插入列数据: put ‘user’,’1’,’info:user_name’,’cwenao’

    • ‘1’: rowkey; ‘info:user_name’:表示创建family中的col user_name; ‘cwenao’: user_name 的值

    这里写图片描述

    创建controller

    HbaseAccountController.java

    /**
     * @author cwenao
     * @version $Id HbaseAccountController.java, v 0.1 2017-02-21 22:20 cwenao Exp $$
     */
    @Controller
    public class HbaseAccountController {
    
        private final static String TABLE_NAME = "user";
    
        private final static String FAMILY_INFO = "info";
    
        @Autowired
        private HbaseAccountInfoService hbaseAccountInfoServiceImpl;
        @RequestMapping(value = "/bigdata/find")
        public String findUserInfoByName(String name, ModelMap modelMap) {
            UserInfo userInfo = hbaseAccountInfoServiceImpl.findUserInfoByEntity(TABLE_NAME, FAMILY_INFO,
                    "1", new UserInfo());
    
            modelMap.addAttribute("userInfo", userInfo);
    
            return "hbase/hbasetest";
        }
    }

    在hbase文件夹下创建hbasetest.html
    hbasetest.html

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>Hbase Test</title>
    </head>
    <body>
    <table>
        <tr><td th:text="UserInfo"></td></tr>
        <tr >
            <td th:text="${userInfo.id}">aabbcc</td>
        </tr>
        <tr>
           <td  th:text="${userInfo.userName}">123dds</td>
        </tr>
        <tr>
            <td th:text="${userInfo.age}">123dds</td>
        </tr>
    </table>
    </body>
    </html>

    配置apigateway

    bigdataserver:
          path: /bigdataserver/**
          serviceId: BIGDATASERVER

    测试

    访问 http://localhost:10002/bigdataserver/bigdata/find?name=%22aaa%22

    这里写图片描述

    错误以及可能

    • 需要排除 servlet-api,不然启动都是问题
    • guava版本冲突,guava版本冲突主要是因为12.x与18.0 API不兼容
    • zk的hostname绑定: 主要是因为下发的是hostname
    • 奇葩问题主要是这几个引起的
    • 实在不行关闭一些日志再查找问题
    • winutils.exe问题请下载hadoop-xxx.tar.gz并解压,HADOOP_HOME以及path

    如关闭确定不会引起错误的日志

      <loggers>
            <root level="DEBUG">
                <appenderref ref="CONSOLE" />
            </root>
            <logger name="com.netflix.discovery" level="ERROR"/>
            <logger name="org.apache.http" level="ERROR"/>
            <logger name="org.mongodb.driver.cluster" level="ERROR"/>
        </loggers>

    代码

    代码请移步 Github参考地址

    如有疑问请加公众号(K171),如果觉得对您有帮助请 github start
    公众号_k171

    展开全文
  • ES-Hadoop插件介绍

    2017-04-27 18:07:30
    上篇文章,写了使用spark集成es框架,并向es写入数据,虽然能够成功,但从集成度上来讲肯定没有官网提供的ES-Hadoop框架来的优雅,今天我们就来认识一下ES-Hadoop这个框架。 我们都知道Hadoop是标准的大数据...
    上篇文章,写了使用spark集成es框架,并向es写入数据,虽然能够成功,但从集成度上来讲肯定没有官网提供的ES-Hadoop框架来的优雅,今天我们就来认识一下ES-Hadoop这个框架。
    


    我们都知道Hadoop是标准的大数据生态代表,里面有非常多的组件来处理不同类型或者场景下的数据,Hadoop的基础组件是YARN,HDFS,MapReduce,我们都知道HDFS是可靠的分布式存储系统,大多数我们都是用MapReduce来分析数据,唯一的不足之处在于速度,为了解决这种问题所以才有了Hbase,Spark,Kylin,Presto,Imapla等等许多框架。而我们的elasticsearch却恰恰相反,尤其是其定位高性能的搜索引擎,处理多维数据的检索分析非常高效,此外ES也是一个分布式的,高可靠的,可扩展的搜索框架,这些特点也决定了其处理海量数据的效率也是非常出色的。但es和hadoop属于两个不同的框架,如果想互相共享数据来处理,就需要自己来写程序把各自的数据导入需要的一方,过程非常繁琐,并且需要关注各自框架的版本,从而容易出现问题。


    ES-Hadoop的出现则解决了这个问题,我们可以把它看做是ES和Hadoop大数据生态圈之间的数据桥梁,通过它,我们可以快速的分析Hadoop里面的海量数据。


    前面说了Hadoop的MapReduce定位是一个离线的批处理计算框架,而现在越来越多的服务,都要求是实时或者近实时的交互式分析,通过ES-Hadoop我们可以轻松的将Hadoop集群上面的数据导入到ES,从而通过使用ES来获得高性能,低延迟,并支持各种聚合,空间检索以及产品推荐的一些特性。最后还可以使用Kibana提供的可视化的数据分析一条龙服务,非常棒的组合。

    整个数据流转图如下:


    [img]http://dl2.iteye.com/upload/attachment/0124/5983/b9c2cbd6-8ae9-3f4b-b535-188b4648fe58.jpg[/img]


    ES-Hadoop无缝打通了ES和Hadoop两个非常优秀的框架,我们既可以把HDFS的数据导入到ES里面做分析,也可以将es数据导出到HDFS上做备份,归档,其中值得一提的是ES-Hadoop全面的支持了Spark框架,其中包括Spark,Spark Streaming,Spark SQL,此外也支持Hive,Pig,Storm,Cascading,当然还有标准的MapReduce,无论用那一个框架集成ES,都是非常简洁的。


    最后ES-Hadoop对各种版本的Hadoop都支持,这里面包含社区版本的Apache Hadoop,Cloudrea的CDH,MapR以及Hortonworks的HDP所以无论我们使用哪个版本的Hadoop都可以非常easy的与ES集成,从而让ES的强大性能帮助我们快速分析海量数据。

    [b][color=green][size=large] 有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。 [/size][/color][/b] [img]http://dl2.iteye.com/upload/attachment/0104/9948/3214000f-5633-3c17-a3d7-83ebda9aebff.jpg[/img]
    展开全文
  • 目录 1. 开发环境 2. 下载地址 3. 使用示例 4. 参考文献 1. 开发环境 ...Elasticsearch 6.5.4 ES-Hadoop 6.5.4 Hadoop 2.0.0 2. 下载地址 ES-Hadoop下载地址如下: 官网地址:https://w...

    1. 开发环境

    • Elasticsearch 6.5.4
    • ES-Hadoop 6.5.4
    • Hadoop 2.0.0

    2. 下载地址

    ES-Hadoop下载地址如下:

    官网地址:https://www.elastic.co/downloads/past-releases

    3. 使用示例

    ES-Hadoop插件使用非常简单,只要在作业中导入jar包,在作业描述类中设置一些属性,就可以了,其他部分操作和一般的MR作业并没有太大差别。

    3.1 导入jar包

    下载好插件解压后,可以看见其中包含对应许多hadoop组件的jar包(hive、pig等),只需要将自己需要的jar包添加项目中,因为这里我只是将hbase里的数据索引到ES中,所以只需要添加elasticsearch-hadoop-mr-6.5.4.jar这个jar包。

    :还需要将所用jar包添加到hadoop的classPath中,否则运行作业时会报找不到类的错误。

    3.2 编写描述类

    只需要添加如下设置:

    
    //禁止speculative机制,该机制会启动多个相同task,使数据重复索引
    conf.setBoolean("mapred.map.tasks.speculative.execution", false);  
    conf.setBoolean("mapred.reduce.tasks.speculative.execution", false);
    //设置ES集群中任意节点的IP地址和端口号
    conf.set("es.nodes", "http://节点IP:9200");
    //设置要索引的index/type
    conf.set("es.resource", "mytest/rec");
    //设置输入的数据格式为json
    conf.set("es.input.json", "yes");
    //设置json中文档id对应的字段名
    conf.set("es.mapping.id", "id");
    
    //设置输出格式为EsOutputFormat类
    job.setOutputFormatClass(EsOutputFormat.class);
    //不需要reduce,map也不需要key,所以将map类的key设置为NullWritable
    job.setMapOutputKeyClass(NullWritable.class);
    //将map的value类型设置为Text
    job.setMapOutputValueClass(Text.class);
    

    3.3 编写Mapper类

    
    
    public class MixRecMapper extends Mapper<LongWritable,Text,NullWritable,Text>{
    
            
        @Override
        protected void map(LongWritable offset, Text userId,org.apache.hadoop.mapreduce.Mapper.Context context)throws IOException, InterruptedException {
            
            //前面为省略的业务逻辑代码
            
            //jsonDoc为自行拼接的json字符串
            String jsonDoc = "{\"id\":\"" + userId.toString() + "\",\"mix_rec\":" + mixList.toString() + "}";
    //              logger.info(jsonDoc+" 入ES的json===========================");
                    context.write(NullWritable.get(),new Text(jsonDoc));
        }
        
    }
    

    4. 参考文献

    官方文档:https://www.elastic.co/guide/en/elasticsearch/hadoop/current/mapreduce.html

    转载于:https://www.cnblogs.com/liminghuang/p/10314182.html

    展开全文
  • hadoop--搭建hbase集群

    2018-06-26 15:21:00
    背景我们已经搭建了HA高可用的hdfs集群,现在要在hdfs集群的基础上搭建hbase集群。可以看我之前的一篇hdfs集群搭建,... hbase-env.sh//#配置一下JAVA环境 export JAVA...

    背景

    我们已经搭建了HA高可用的hdfs集群,现在要在hdfs集群的基础上搭建hbase集群。可以看我之前的一篇hdfs集群搭建,

    https://blog.csdn.net/fantasticqiang/article/details/80707837

    自行官网下载hbase,我这里选用1.2.3版本

    修改hbase配置文件

    1. hbase-env.sh
    //#配置一下JAVA环境
    export JAVA_HOME=/usr/local/jdk
    //# Tell HBase whether it should manage it's own instance of Zookeeper or not.
    export HBASE_MANAGES_ZK=false
    

    2. hbase-site.xml

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
    /**
     *
     * Licensed to the Apache Software Foundation (ASF) under one
     * or more contributor license agreements.  See the NOTICE file
     * distributed with this work for additional information
     * regarding copyright ownership.  The ASF licenses this file
     * to you under the Apache License, Version 2.0 (the
     * "License"); you may not use this file except in compliance
     * with the License.  You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    -->
    <configuration>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://mycluster/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>es02:2181,es03:2181,es04:2181</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/hadoop/zk/data</value>
    </property>
    </configuration>
    3. 配置regionservers,regionserver的节点
    es02
    es03
    es04

    注意事项

    由于hdfs配置了HA高可用,我们在hadoop的hdfs-site.xml中配置了"dfs.nameservices"的名称“mycluster”他下面有两个名称节点“nn1,nn2”,我们需要把hadoop中的hdfs-site.xml和core-site.xml放到hbase目录下的conf文件夹中,不然hbase集群在启动的时候会报"unkonwHostException"。

    启动测试

    //启动命令
    start-hbase.sh
    

    登录webUI 查看


    展开全文
  • 背景知识见链接: elasticsearch备份与恢复2_es通过repository-hdfs插件支持snapshot和restore API es使用repository-hdfs插件通过snapshot和restore,来执行将索引传入HDFS以及从HDFS中恢复。但这样的在HDFS中的...
  • Hadoop-Hbase-ElasticSearchES)-Janusgraph环境搭建 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex...
  • titan-1.0.0-hadoop1 + Hbase 问题

    千次阅读 2016-09-08 19:30:15
    Titan运行graph = TitanFactory.open('conf/titan-hbase-es.properties')时出现 “com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager”错误。 TitanFactory.open无法远程打开Titan实例,或...
  • elasticsearch-auth.zip,此插件筛选ElasticSearch内容。ElasticSearch的身份验证筛选器
  • 版本选择:Hadoop-3.2.1/Hbase-2.2.5 一、Zookeeper正常部署 [deploy@hadoop102 module]$ zk.sh start 二、Hadoop正常部署 [deploy@hadoop102 module]$ start-dfs.sh [deploy@hadoop102 module]$ start-yarn...
  • [Elasticsearch基础]-- 整合hbase步骤

    千次阅读 2016-06-07 09:48:39
    1:在hh15\hh16\hh17上启动hbase集群: 先启动zookeeper-3.4.6:#sh /home/zookeeper-3.4.6/bin/zkServer.sh start 再启动hdfs: #start-dfs.sh  #start-yarn.sh 最后启动hbase:#start-hbase.sh   2:设计...
  • elasticsearch+hbase海量数据查询,支持千万数据秒回查询 博客地址: 一、ElasticSearchHbase ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。...
  • Flink---hbase-sink支持kerberos认证1

    千次阅读 2020-06-16 14:17:25
    项目中需要用到Flink往hbase写数据,但是默认的FlinkUpsertSinkFunction不支持kerberos认证,不支持就无法往hbase插入数据。 在原有的HBaseUpsertSinkFunction的基础上修改 增加kerberos认证,以下是修改好之后的...
  • ELK hadoop hbase

    千次阅读 2017-08-18 14:40:59
    elasticsearch 特性 kibana logstash 方案2-hadoophbasehive hadoop hbase hive 方案对比 本公司应用场合 附 引方案1-ELK E-elasticsearch L-logstash K-kibana elasticsearchElasticSearch是一个基于Lucene的...
  • 引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试。其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式。至于为什么先写单机的搭建,是因为作为个人...
  • hadoop离线day03--Hadoop HDFS 目录 hadoop离线day03--Hadoop HDFS 今日内容大纲 Apache HDFS入门 概念 HDFS重要特性 分块存储 副本机制 HDFS shell操作 命令 shell常见命令操作 文件限额操作 相关的...
  • 文章目录概述HadoopHDFSHBase实现原理Regin服务器原理HBase安装与使用NoSQL数据库MapReduceHive 概述 IT领域每隔十五年就会迎来一次重大变革: 1980:个人计算机 1995:互联网 2010:物联网、云计算和大数据 信息...
  • 大数据1-Hadoop概述

    2020-03-15 18:08:13
    大数据1-Hadoop概述 特点 4V 数据量大 高速 多样 低密度价值 Hadoop 是什么 是Apache基金会所开发的分布式系统基础框架 主要解决,海量数据的存储和海量数据的分析计算问题 广义上讲,Hadoop通常指更广泛的概念--...
  • Hbase总结 官网:http://hbase.apache.org/   概述  hbase是bigtable的开源java版本。是建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写nosql的数据库系统。它介于nosql和RDBMS之间,仅能...
  • Hbase导数据的几种方式 测试数据请到Blog中下载:...     1-1)、hive-hbase-handler导数据 A)、反编译JAR包 http://www.apache.org/dyn/closer.cgi/hive/选择apache-hive-1.2.1-src.tar....
  • 集群搭建集群规划汇总Linux 环境准备Hadoop Ha 集群搭建Yarn 搭建Hive 搭建Spark 搭建Spark Standalone 模式Spark Yarn 模式Kafka 搭建Hbase 搭建Sqoop 搭建Flume 搭建 本文将持续更新… 集群规划汇总 角色 node...
  • 本文内容 HBase 简介和应用场景 spring-boot-starter-hbase 开源简介 ...HBase 是在 Hadoop 分布式文件系统(简称:HDFS)之上的分布式面向列的数据库。而且是 2007 最初原型,历史悠久。那追根究底,Hadoop 是什...
  • 大数据介绍和集群安装--hadoop

    千次阅读 多人点赞 2020-10-07 21:19:12
    大数据介绍及集群安装第一部分 《大数据概述》第二部分《Hadoop详解》第三部分《Hadoop集群搭建》1、大数据概述2、什么是大数据?(Big Data)3、传统数据与大数据的对比4、大数据的特点5、大数据生态系统6、大数据...
  • ##################### 环境 ########################## #OS版本号 [troll@standalone softs]$ cat /etc/centos-release CentOS Linux release 7.5.1804 (Core) ...hbase-2.1.0 jdk1.8.0_191 scala-2....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,932
精华内容 4,772
关键字:

es-hadoophbase