【转载】Hadoop可视化分析利器之Hue

http://qindongliang.iteye.com/blog/2212619

先来看下hue的架构图: 
 


(1)Hue是什么? 

Hue是一个可快速开发和调试Hadoop生态系统各种应用的一个基于浏览器的图形化用户接口。 


(2)Hue能干什么? 

1,访问HDFS和文件浏览 
2,通过web调试和开发hive以及数据结果展示 
3,查询solr和结果展示,报表生成 
4,通过web调试和开发impala交互式SQL Query 
5,spark调试和开发 
6,Pig开发和调试 
7,oozie任务的开发,监控,和工作流协调调度 
8,Hbase数据查询和修改,数据展示 
9,Hive的元数据(metastore)查询 
10,MapReduce任务进度查看,日志追踪 
11,创建和提交MapReduce,Streaming,Java job任务 
12,Sqoop2的开发和调试 
13,Zookeeper的浏览和编辑 
14,数据库(MySQL,PostGres,SQlite,Oracle)的查询和展示 

(3)Hue怎么用或者什么时候应该用? 

如果你们公司用的是CDH的hadoop,那么很幸运,Hue也是出自CDH公司,自家的东西用起来当然很爽。 

如果你们公司用的是Apache Hadoop或者是HDP的hadoop,那么也没事,Hue是开源的,而且支持任何版本的hadoop。 

关于什么时候用,这纯属一个锦上添花的功能,你完全可以不用hue,因为各种开源项目都有自己的使用方式和开发接口,hue只不过是统一了各个项目的开发方式在一个接口里而已,这样比较方便而已,不用你一会准备使用hive,就开一个hive的cli终端,一会用pig,你就得开一个pig的grunt,或者你又想查Hbase,又得需要开一个Hbase的shell终端。如果你们使用hadoop生态系统的组件很多的情况下,使用hue还是比较方便的,另外一个好处就是hue提供了一个web的界面来开发和调试任务,不用我们再频繁登陆Linux来操作了。 

你可以在任何时候,只要能上网,就可以通过hue来开发和调试数据,不用再装Linux的客户端来远程登陆操作了,这也是B/S架构的好处。 


(4)如何下载,安装和编译Hue? 

centos系统,执行命令: 
yum install -y asciidoc cyrus-sasl-devel cyrus-sasl-gssapi gcc gcc-c++ krb5-devel  libtidy  libxml2-devel libxslt-devel make mysql mysql-devel openldap-devel python-devel   sqlite-devel openssl-devel  gmp-devel 


1,hue的依赖(centos系统) 

Java代码   收藏代码
  1. ant  
  2. asciidoc  
  3. cyrus-sasl-devel  
  4. cyrus-sasl-gssapi  
  5. gcc  
  6. gcc-c++  
  7. krb5-devel  
  8. libtidy (for unit tests only)  
  9. libxml2-devel  
  10. libxslt-devel  
  11. make  
  12. mvn (from maven package or maven3 tarball)  
  13. mysql  
  14. mysql-devel  
  15. openldap-devel  
  16. python-devel  
  17. sqlite-devel  
  18. openssl-devel (for version 7+)  



2,散仙的在安装hue前,centos上已经安装好了,jdk,maven,ant,hadoop,hive,oozie等,环境变量如下:

Java代码   收藏代码
  1. user="search"  
  2.   
  3. # java  
  4. export JAVA_HOME="/usr/local/jdk"  
  5. export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib  
  6. export PATH=$PATH:$JAVA_HOME/bin  
  7.   
  8. # ant   
  9. export ANT_HOME=/usr/local/ant  
  10. export CLASSPATH=$CLASSPATH:$ANT_HOME/lib  
  11. export PATH=$PATH:$ANT_HOME/bin  
  12.   
  13. # maven   
  14. export MAVEN_HOME="/usr/local/maven"  
  15. export CLASSPATH=$CLASSPATH:$MAVEN_HOME/lib  
  16. export PATH=$PATH:$MAVEN_HOME/bin  
  17.   
  18.   
  19.   
  20. ##Hadoop2.2的变量设置  
  21. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  
  22. export HADOOP_HOME=/home/search/hadoop  
  23. export HADOOP_MAPRED_HOME=$HADOOP_HOME  
  24. export HADOOP_COMMON_HOME=$HADOOP_HOME  
  25. export HADOOP_HDFS_HOME=$HADOOP_HOME  
  26. export YARN_HOME=$HADOOP_HOME  
  27. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  
  28. export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop  
  29. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  
  30. export CLASSPATH=.:$CLASSPATH:$HADOOP_COMMON_HOME:$HADOOP_COMMON_HOMEi/lib:$HADOOP_MAPRED_HOME:$HADOOP_HDFS_HOME:$HADOOP_HDFS_HOME  
  31.   
  32.   
  33.   
  34. # Hive   
  35.   
  36. export HIVE_HOME=/home/search/hive    
  37. export HIVE_CONF_DIR=/home/search/hive/conf    
  38. export CLASSPATH=$CLASSPATH:$HIVE_HOME/lib    
  39. export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf   
  40.   
  41.   
  42. export OOZIE_HOME="/home/search/oozie-4.1.0"  
  43. export PATH=$PATH:$OOZIE_HOME/sbin:$OOZIE_HOME/bin  



3,本文散仙主要是采用tar包的方式安装hue,除了tar包的方式,hue还能采用cm安装,当然这就与cdh的系统依赖比较大了。 


hue最新的版本是3.8.1,散仙这里用的3.7.0的版本 
下载地址:https://github.com/cloudera/hue/releases 

hue的github地址:https://github.com/cloudera/hue 

4,下载完后,解压tar包,并进入hue的根目录执行命令 
make apps编译 

5,编译成功后,需要配置/home/search/hue/desktop/conf/pseudo-distributed.ini文件,里面包含了hdfs,yarn,mapreduce,hive,oozie,pig,spark,solr等的ip地址和端口号配置,可根据自己的情况设置,如果没有安装某个应用,那就无须配置,只不过这个应用在web上不能使用而已,并不会影响其他框架的使用。 

一个例子如下: 

Java代码   收藏代码
  1. #####################################  
  2. # DEVELOPMENT EDITION  
  3. #####################################  
  4.   
  5. # Hue configuration file  
  6. # ===================================  
  7. #  
  8. # For complete documentation about the contents of this file, run  
  9. #       $ /build/env/bin/hue config_help  
  10. #  
  11. # All .ini files under the current directory are treated equally.  Their  
  12. # contents are merged to form the Hue configuration, which can  
  13. # can be viewed on the Hue at  
  14. #       http://:/dump_config  
  15.   
  16.   
  17. ###########################################################################  
  18. # General configuration for core Desktop features (authentication, etc)  
  19. ###########################################################################  
  20.   
  21. [desktop]  
  22.   
  23.   send_dbug_messages=1  
  24.   
  25.   # To show database transactions, set database_logging to 1  
  26.   database_logging=0  
  27.   
  28.   # Set this to a random string, the longer the better.  
  29.   # This is used for secure hashing in the session store.  
  30.   secret_key=search  
  31.   
  32.   # Webserver listens on this address and port  
  33.   http_host=0.0.0.0  
  34.   http_port=8000  
  35.   
  36.   # Time zone name  
  37.   time_zone=Asia/Shanghai  
  38.   
  39.   # Enable or disable Django debug mode  
  40.   ## django_debug_mode=true  
  41.   
  42.   # Enable or disable backtrace for server error  
  43.   ## http_500_debug_mode=true  
  44.   
  45.   # Enable or disable memory profiling.  
  46.   ## memory_profiler=false  
  47.   
  48.   # Server email for internal error messages  
  49.   ## django_server_email='[email protected]'  
  50.   
  51.   # Email backend  
  52.   ## django_email_backend=django.core.mail.backends.smtp.EmailBackend  
  53.   
  54.   # Webserver runs as this user  
  55.   server_user=search  
  56.   server_group=search  
  57.   
  58.   # This should be the Hue admin and proxy user  
  59.   default_user=search  
  60.   
  61.   # This should be the hadoop cluster admin  
  62.   default_hdfs_superuser=search  
  63.   
  64.   # If set to false, runcpserver will not actually start the web server.  
  65.   # Used if Apache is being used as a WSGI container.  
  66.   ## enable_server=yes  
  67.   
  68.   # Number of threads used by the CherryPy web server  
  69.   ## cherrypy_server_threads=10  
  70.   
  71.   # Filename of SSL Certificate  
  72.   ## ssl_certificate=  
  73.   
  74.   # Filename of SSL RSA Private Key  
  75.   ## ssl_private_key=  
  76.   
  77.   # List of allowed and disallowed ciphers in cipher list format.  
  78.   # See http://www.openssl.org/docs/apps/ciphers.html for more information on cipher list format.  
  79.   ## ssl_cipher_list=DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2  
  80.   
  81.   # LDAP username and password of the hue user used for LDAP authentications.  
  82.   # Set it to use LDAP Authentication with HiveServer2 and Impala.  
  83.   ## ldap_username=hue  
  84.   ## ldap_password=  
  85.   
  86.   # Default encoding for site data  
  87.   ## default_site_encoding=utf-8  
  88.   
  89.   # Help improve Hue with anonymous usage analytics.  
  90.   # Use Google Analytics to see how many times an application or specific section of an application is used, nothing more.  
  91.   ## collect_usage=true  
  92.   
  93.   # Support for HTTPS termination at the load-balancer level with SECURE_PROXY_SSL_HEADER.  
  94.   ## secure_proxy_ssl_header=false  
  95.   
  96.   # Comma-separated list of Django middleware classes to use.  
  97.   # See https://docs.djangoproject.com/en/1.4/ref/middleware/ for more details on middlewares in Django.  
  98.   ## middleware=desktop.auth.backend.LdapSynchronizationBackend  
  99.   
  100.   # Comma-separated list of regular expressions, which match the redirect URL.  
  101.   # For example, to restrict to your local domain and FQDN, the following value can be used:  
  102.   # ^\/.*$,^http:\/\/www.mydomain.com\/.*$  
  103.   ## redirect_whitelist=  
  104.   
  105.   # Comma separated list of apps to not load at server startup.  
  106.   # e.g.: pig,zookeeper  
  107.   ## app_blacklist=  
  108.   
  109.   # The directory where to store the auditing logs. Auditing is disable if the value is empty.  
  110.   # e.g. /var/log/hue/audit.log  
  111.   ## audit_event_log_dir=  
  112.   
  113.   # Size in KB/MB/GB for audit log to rollover.  
  114.   ## audit_log_max_file_size=100MB  
  115.   
  116. #poll_enabled=false  
  117.   
  118.   # Administrators  
  119.   # ----------------  
  120.   [[django_admins]]  
  121.     ## [[[admin1]]]  
  122.     ## name=john  
  123.     ## email=john@doe.com  
  124.   
  125.   # UI customizations  
  126.   # -------------------  
  127.   [[custom]]  
  128.   
  129.   # Top banner HTML code  
  130.   #banner_top_html=Search Team Hadoop Manager  
  131.   
  132.   # Configuration options for user authentication into the web application  
  133.   # ------------------------------------------------------------------------  
  134.   [[auth]]  
  135.   
  136.     # Authentication backend. Common settings are:  
  137.     # - django.contrib.auth.backends.ModelBackend (entirely Django backend)  
  138.     # - desktop.auth.backend.AllowAllBackend (allows everyone)  
  139.     # - desktop.auth.backend.AllowFirstUserDjangoBackend  
  140.     #     (Default. Relies on Django and user manager, after the first login)  
  141.     # - desktop.auth.backend.LdapBackend  
  142.     # - desktop.auth.backend.PamBackend  
  143.     # - desktop.auth.backend.SpnegoDjangoBackend  
  144.     # - desktop.auth.backend.RemoteUserDjangoBackend  
  145.     # - libsaml.backend.SAML2Backend  
  146.     # - libopenid.backend.OpenIDBackend  
  147.     # - liboauth.backend.OAuthBackend  
  148.     #     (New oauth, support Twitter, Facebook, Google+ and Linkedin  
  149.     ## backend=desktop.auth.backend.AllowFirstUserDjangoBackend  
  150.   
  151.     # The service to use when querying PAM.  
  152.     ## pam_service=login  
  153.   
  154.     # When using the desktop.auth.backend.RemoteUserDjangoBackend, this sets  
  155.     # the normalized name of the header that contains the remote user.  
  156.     # The HTTP header in the request is converted to a key by converting  
  157.     # all characters to uppercase, replacing any hyphens with underscores  
  158.     # and adding an HTTP_ prefix to the name. So, for example, if the header  
  159.     # is called Remote-User that would be configured as HTTP_REMOTE_USER  
  160.     #  
  161.     # Defaults to HTTP_REMOTE_USER  
  162.     ## remote_user_header=HTTP_REMOTE_USER  
  163.   
  164.     # Ignore the case of usernames when searching for existing users.  
  165.     # Only supported in remoteUserDjangoBackend.  
  166.     ## ignore_username_case=false  
  167.   
  168.     # Ignore the case of usernames when searching for existing users to authenticate with.  
  169.     # Only supported in remoteUserDjangoBackend.  
  170.     ## force_username_lowercase=false  
  171.   
  172.     # Users will expire after they have not logged in for 'n' amount of seconds.  
  173.     # A negative number means that users will never expire.  
  174.     ## expires_after=-1  
  175.   
  176.     # Apply 'expires_after' to superusers.  
  177.     ## expire_superusers=true  
  178.   
  179.   # Configuration options for connecting to LDAP and Active Directory  
  180.   # -------------------------------------------------------------------  
  181.   [[ldap]]  
  182.   
  183.     # The search base for finding users and groups  
  184.     ## base_dn="DC=mycompany,DC=com"  
  185.   
  186.     # URL of the LDAP server  
  187.     ## ldap_url=ldap://auth.mycompany.com  
  188.   
  189.     # A PEM-format file containing certificates for the CA's that  
  190.     # Hue will trust for authentication over TLS.  
  191.     # The certificate for the CA that signed the  
  192.     # LDAP server certificate must be included among these certificates.  
  193.     # See more here http://www.openldap.org/doc/admin24/tls.html.  
  194.     ## ldap_cert=  
  195.     ## use_start_tls=true  
  196.   
  197.     # Distinguished name of the user to bind as -- not necessary if the LDAP server  
  198.     # supports anonymous searches  
  199.     ## bind_dn="CN=ServiceAccount,DC=mycompany,DC=com"  
  200.   
  201.     # Password of the bind user -- not necessary if the LDAP server supports  
  202.     # anonymous searches  
  203.     ## bind_password=  
  204.   
  205.     # Pattern for searching for usernames -- Use  for the parameter  
  206.     # For use when using LdapBackend for Hue authentication  
  207.     ## ldap_username_pattern="uid=,ou=People,dc=mycompany,dc=com"  
  208.   
  209.     # Create users in Hue when they try to login with their LDAP credentials  
  210.     # For use when using LdapBackend for Hue authentication  
  211.     ## create_users_on_login = true  
  212.   
  213.     # Synchronize a users groups when they login  
  214.     ## sync_groups_on_login=false  
  215.   
  216.     # Ignore the case of usernames when searching for existing users in Hue.  
  217.     ## ignore_username_case=false  
  218.   
  219.     # Force usernames to lowercase when creating new users from LDAP.  
  220.     ## force_username_lowercase=false  
  221.   
  222.     # Use search bind authentication.  
  223.     ## search_bind_authentication=true  
  224.   
  225.     # Choose which kind of subgrouping to use: nested or suboordinate (deprecated).  
  226.     ## subgroups=suboordinate  
  227.   
  228.     # Define the number of levels to search for nested members.  
  229.     ## nested_members_search_depth=10  
  230.   
  231.     [[[users]]]  
  232.   
  233.       # Base filter for searching for users  
  234.       ## user_filter="objectclass=*"  
  235.   
  236.       # The username attribute in the LDAP schema  
  237.       ## user_name_attr=sAMAccountName  
  238.   
  239.     [[[groups]]]  
  240.   
  241.       # Base filter for searching for groups  
  242.       ## group_filter="objectclass=*"  
  243.   
  244.       # The username attribute in the LDAP schema  
  245.       ## group_name_attr=cn  
  246.   
  247.     [[[ldap_servers]]]  
  248.   
  249.       ## [[[[mycompany]]]]  
  250.   
  251.         # The search base for finding users and groups  
  252.         ## base_dn="DC=mycompany,DC=com"  
  253.   
  254.         # URL of the LDAP server  
  255.         ## ldap_url=ldap://auth.mycompany.com  
  256.   
  257.         # A PEM-format file containing certificates for the CA's that  
  258.         # Hue will trust for authentication over TLS.  
  259.         # The certificate for the CA that signed the  
  260.         # LDAP server certificate must be included among these certificates.  
  261.         # See more here http://www.openldap.org/doc/admin24/tls.html.  
  262.         ## ldap_cert=  
  263.         ## use_start_tls=true  
  264.   
  265.         # Distinguished name of the user to bind as -- not necessary if the LDAP server  
  266.         # supports anonymous searches  
  267.         ## bind_dn="CN=ServiceAccount,DC=mycompany,DC=com"  
  268.   
  269.         # Password of the bind user -- not necessary if the LDAP server supports  
  270.         # anonymous searches  
  271.         ## bind_password=  
  272.   
  273.         # Pattern for searching for usernames -- Use  for the parameter  
  274.         # For use when using LdapBackend for Hue authentication  
  275.         ## ldap_username_pattern="uid=,ou=People,dc=mycompany,dc=com"  
  276.   
  277.         ## Use search bind authentication.  
  278.         ## search_bind_authentication=true  
  279.   
  280.         ## [[[[[users]]]]]  
  281.   
  282.           # Base filter for searching for users  
  283.           ## user_filter="objectclass=Person"  
  284.   
  285.           # The username attribute in the LDAP schema  
  286.           ## user_name_attr=sAMAccountName  
  287.   
  288.         ## [[[[[groups]]]]]  
  289.   
  290.           # Base filter for searching for groups  
  291.           ## group_filter="objectclass=groupOfNames"  
  292.   
  293.           # The username attribute in the LDAP schema  
  294.           ## group_name_attr=cn  
  295.   
  296.   # Configuration options for specifying the Desktop Database. For more info,  
  297.   # see http://docs.djangoproject.com/en/1.4/ref/settings/#database-engine  
  298.   # ------------------------------------------------------------------------  
  299.   [[database]]  
  300.     # Database engine is typically one of:  
  301.     # postgresql_psycopg2, mysql, sqlite3 or oracle.  
  302.     #  
  303.     # Note that for sqlite3, 'name', below is a a path to the filename. For other backends, it is the database name.  
  304.     # Note for Oracle, options={ 'threaded':true} must be set in order to avoid crashes.  
  305.     # Note for Oracle, you can use the Oracle Service Name by setting "port=0" and then "name=:/".  
  306.     ## engine=sqlite3  
  307.     ## host=  
  308.     ## port=  
  309.     ## user=  
  310.     ## password=  
  311.     ## name=desktop/desktop.db  
  312.     ## options={}  
  313.   
  314.   # Configuration options for specifying the Desktop session.  
  315.   # For more info, see https://docs.djangoproject.com/en/1.4/topics/http/sessions/  
  316.   # ------------------------------------------------------------------------  
  317.   [[session]]  
  318.     # The cookie containing the users' session ID will expire after this amount of time in seconds.  
  319.     # Default is 2 weeks.  
  320.     ## ttl=1209600  
  321.   
  322.     # The cookie containing the users' session ID will be secure.  
  323.     # Should only be enabled with HTTPS.  
  324.     ## secure=false  
  325.   
  326.     # The cookie containing the users' session ID will use the HTTP only flag.  
  327.     ## http_only=false  
  328.   
  329.     # Use session-length cookies. Logs out the user when she closes the browser window.  
  330.     ## expire_at_browser_close=false  
  331.   
  332.   
  333.   # Configuration options for connecting to an external SMTP server  
  334.   # ------------------------------------------------------------------------  
  335.   [[smtp]]  
  336.   
  337.     # The SMTP server information for email notification delivery  
  338.     host=localhost  
  339.     port=25  
  340.     user=  
  341.     password=  
  342.   
  343.     # Whether to use a TLS (secure) connection when talking to the SMTP server  
  344.     tls=no  
  345.   
  346.     # Default email address to use for various automated notification from Hue  
  347.     ## default_from_email=hue@localhost  
  348.   
  349.   
  350.   # Configuration options for Kerberos integration for secured Hadoop clusters  
  351.   # ------------------------------------------------------------------------  
  352.   [[kerberos]]  
  353.   
  354.     # Path to Hue's Kerberos keytab file  
  355.     ## hue_keytab=  
  356.     # Kerberos principal name for Hue  
  357.     ## hue_principal=hue/hostname.foo.com  
  358.     # Path to kinit  
  359.     ## kinit_path=/path/to/kinit  
  360.   
  361.   
  362.   # Configuration options for using OAuthBackend (Core) login  
  363.   # ------------------------------------------------------------------------  
  364.   [[oauth]]  
  365.     # The Consumer key of the application  
  366.     ## consumer_key=XXXXXXXXXXXXXXXXXXXXX  
  367.   
  368.     # The Consumer secret of the application  
  369.     ## consumer_secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
  370.   
  371.     # The Request token URL  
  372.     ## request_token_url=https://api.twitter.com/oauth/request_token  
  373.   
  374.     # The Access token URL  
  375.     ## access_token_url=https://api.twitter.com/oauth/access_token  
  376.   
  377.     # The Authorize URL  
  378.     ## authenticate_url=https://api.twitter.com/oauth/authorize  
  379.   
  380.   
  381. ###########################################################################  
  382. # Settings to configure SAML  
  383. ###########################################################################  
  384.   
  385. [libsaml]  
  386.   # Xmlsec1 binary path. This program should be executable by the user running Hue.  
  387.   ## xmlsec_binary=/usr/local/bin/xmlsec1  
  388.   
  389.   # Entity ID for Hue acting as service provider.  
  390.   # Can also accept a pattern where '' will be replaced with server URL base.  
  391.   ## entity_id="/saml2/metadata/"  
  392.   
  393.   # Create users from SSO on login.  
  394.   ## create_users_on_login=true  
  395.   
  396.   # Required attributes to ask for from IdP.  
  397.   # This requires a comma separated list.  
  398.   ## required_attributes=uid  
  399.   
  400.   # Optional attributes to ask for from IdP.  
  401.   # This requires a comma separated list.  
  402.   ## optional_attributes=  
  403.   
  404.   # IdP metadata in the form of a file. This is generally an XML file containing metadata that the Identity Provider generates.  
  405.   ## metadata_file=  
  406.   
  407.   # Private key to encrypt metadata with.  
  408.   ## key_file=  
  409.   
  410.   # Signed certificate to send along with encrypted metadata.  
  411.   ## cert_file=  
  412.   
  413.   # A mapping from attributes in the response from the IdP to django user attributes.  
  414.   ## user_attribute_mapping={ 'uid':'username'}  
  415.   
  416.   # Have Hue initiated authn requests be signed and provide a certificate.  
  417.   ## authn_requests_signed=false  
  418.   
  419.   # Have Hue initiated logout requests be signed and provide a certificate.  
  420.   ## logout_requests_signed=false  
  421.   
  422.   # Username can be sourced from 'attributes' or 'nameid'.  
  423.   ## username_source=attributes  
  424.   
  425.   # Performs the logout or not.  
  426.   ## logout_enabled=true  
  427.   
  428.   
  429. ###########################################################################  
  430. # Settings to configure OpenId  
  431. ###########################################################################  
  432.   
  433. [libopenid]  
  434.   # (Required) OpenId SSO endpoint url.  
  435.   ## server_endpoint_url=https://www.google.com/accounts/o8/id  
  436.   
  437.   # OpenId 1.1 identity url prefix to be used instead of SSO endpoint url  
  438.   # This is only supported if you are using an OpenId 1.1 endpoint  
  439.   ## identity_url_prefix=https://app.onelogin.com/openid/your_company.com/  
  440.   
  441.   # Create users from OPENID on login.  
  442.   ## create_users_on_login=true  
  443.   
  444.   # Use email for username  
  445.   ## use_email_for_username=true  
  446.   
  447.   
  448. ###########################################################################  
  449. # Settings to configure OAuth  
  450. ###########################################################################  
  451.   
  452. [liboauth]  
  453.   # NOTE:  
  454.   # To work, each of the active (i.e. uncommented) service must have  
  455.   # applications created on the social network.  
  456.   # Then the "consumer key" and "consumer secret" must be provided here.  
  457.   #  
  458.   # The addresses where to do so are:  
  459.   # Twitter:  https://dev.twitter.com/apps  
  460.   # Google+ : https://cloud.google.com/  
  461.   # Facebook: https://developers.facebook.com/apps  
  462.   # Linkedin: https://www.linkedin.com/secure/developer  
  463.   #  
  464.   # Additionnaly, the following must be set in the application settings:  
  465.   # Twitter:  Callback URL (aka Redirect URL) must be set to http://YOUR_HUE_IP_OR_DOMAIN_NAME/oauth/social_login/oauth_authenticated  
  466.   # Google+ : CONSENT SCREEN must have email address  
  467.   # Facebook: Sandbox Mode must be DISABLED  
  468.   # Linkedin: "In OAuth User Agreement", r_emailaddress is REQUIRED  
  469.   
  470.   # The Consumer key of the application  
  471.   ## consumer_key_twitter=  
  472.   ## consumer_key_google=  
  473.   ## consumer_key_facebook=  
  474.   ## consumer_key_linkedin=  
  475.   
  476.   # The Consumer secret of the application  
  477.   ## consumer_secret_twitter=  
  478.   ## consumer_secret_google=  
  479.   ## consumer_secret_facebook=  
  480.   ## consumer_secret_linkedin=  
  481.   
  482.   # The Request token URL  
  483.   ## request_token_url_twitter=https://api.twitter.com/oauth/request_token  
  484.   ## request_token_url_google=https://accounts.google.com/o/oauth2/auth  
  485.   ## request_token_url_linkedin=https://www.linkedin.com/uas/oauth2/authorization  
  486.   ## request_token_url_facebook=https://graph.facebook.com/oauth/authorize  
  487.   
  488.   # The Access token URL  
  489.   ## access_token_url_twitter=https://api.twitter.com/oauth/access_token  
  490.   ## access_token_url_google=https://accounts.google.com/o/oauth2/token  
  491.   ## access_token_url_facebook=https://graph.facebook.com/oauth/access_token  
  492.   ## access_token_url_linkedin=https://api.linkedin.com/uas/oauth2/accessToken  
  493.   
  494.   # The Authenticate URL  
  495.   ## authenticate_url_twitter=https://api.twitter.com/oauth/authorize  
  496.   ## authenticate_url_google=https://www.googleapis.com/oauth2/v1/userinfo?access_token=  
  497.   ## authenticate_url_facebook=https://graph.facebook.com/me?access_token=  
  498.   ## authenticate_url_linkedin=https://api.linkedin.com/v1/people/~:(email-address)?format=json&oauth2_access_token=  
  499.   
  500.   # Username Map. Json Hash format.  
  501.   # Replaces username parts in order to simplify usernames obtained  
  502.   # Example: { "@sub1.domain.com":"_S1", "@sub2.domain.com":"_S2"}  
  503.   # converts '[email protected]' to 'email_S1'  
  504.   ## username_map={}  
  505.   
  506.   # Whitelisted domains (only applies to Google OAuth). CSV format.  
  507.   ## whitelisted_domains_google=  
  508.   
  509. ###########################################################################  
  510. # Settings for the RDBMS application  
  511. ###########################################################################  
  512.   
  513. [librdbms]  
  514.   # The RDBMS app can have any number of databases configured in the databases  
  515.   # section. A database is known by its section name  
  516.   # (IE sqlite, mysql, psql, and oracle in the list below).  
  517.   
  518.   [[databases]]  
  519.     # sqlite configuration.  
  520.     ## [[[sqlite]]]  
  521.       # Name to show in the UI.  
  522.       ## nice_name=SQLite  
  523.   
  524.       # For SQLite, name defines the path to the database.  
  525.       ## name=/tmp/sqlite.db  
  526.   
  527.       # Database backend to use.  
  528.       ## engine=sqlite  
  529.   
  530.       # Database options to send to the server when connecting.  
  531.       # https://docs.djangoproject.com/en/1.4/ref/databases/  
  532.       ## options={}  
  533.   
  534.     # mysql, oracle, or postgresql configuration.  
  535.     ## [[[mysql]]]  
  536.       # Name to show in the UI.  
  537.       ## nice_name="My SQL DB"  
  538.   
  539.       # For MySQL and PostgreSQL, name is the name of the database.  
  540.       # For Oracle, Name is instance of the Oracle server. For express edition  
  541.       # this is 'xe' by default.  
  542.       ## name=mysqldb  
  543.   
  544.       # Database backend to use. This can be:  
  545.       # 1. mysql  
  546.       # 2. postgresql  
  547.       # 3. oracle  
  548.       ## engine=mysql  
  549.   
  550.       # IP or hostname of the database to connect to.  
  551.       ## host=localhost  
  552.   
  553.       # Port the database server is listening to. Defaults are:  
  554.       # 1. MySQL: 3306  
  555.       # 2. PostgreSQL: 5432  
  556.       # 3. Oracle Express Edition: 1521  
  557.       ## port=3306  
  558.   
  559.       # Username to authenticate with when connecting to the database.  
  560.       ## user=example  
  561.   
  562.       # Password matching the username to authenticate with when  
  563.       # connecting to the database.  
  564.       ## password=example  
  565.   
  566.       # Database options to send to the server when connecting.  
  567.       # https://docs.djangoproject.com/en/1.4/ref/databases/  
  568.       ## options={}  
  569.   
  570. ###########################################################################  
  571. # Settings to configure your Hadoop cluster.  
  572. ###########################################################################  
  573.   
  574. [hadoop]  
  575.   
  576.   # Configuration for HDFS NameNode  
  577.   # ------------------------------------------------------------------------  
  578.   [[hdfs_clusters]]  
  579.     # HA support by using HttpFs  
  580.   
  581.     [[[default]]]  
  582.       # Enter the filesystem uri  
  583.       fs_defaultfs=hdfs://h1:8020  
  584.   
  585.       # NameNode logical name.  
  586.       logical_name=h1  
  587.   
  588.       # Use WebHdfs/HttpFs as the communication mechanism.  
  589.       # Domain should be the NameNode or HttpFs host.  
  590.       # Default port is 14000 for HttpFs.  
  591.       webhdfs_url=http://h1:50070/webhdfs/v1  
  592.   
  593.       # Change this if your HDFS cluster is Kerberos-secured  
  594.       security_enabled=false  
  595.   
  596.       # Default umask for file and directory creation, specified in an octal value.  
  597.       umask=022  
  598.       hadoop_conf_dir=/home/search/hadoop/etc/hadoop  
  599.   
  600.   # Configuration for YARN (MR2)  
  601.   # ------------------------------------------------------------------------  
  602.   [[yarn_clusters]]  
  603.   
  604.     [[[default]]]  
  605.       # Enter the host on which you are running the ResourceManager  
  606.       resourcemanager_host=h1  
  607.   
  608.       # The port where the ResourceManager IPC listens on  
  609.       resourcemanager_port=8032  
  610.   
  611.       # Whether to submit jobs to this cluster  
  612.       submit_to=True  
  613.   
  614.       # Resource Manager logical name (required for HA)  
  615.       ## logical_name=  
  616.   
  617.       # Change this if your YARN cluster is Kerberos-secured  
  618.       ## security_enabled=false  
  619.   
  620.       # URL of the ResourceManager API  
  621.       resourcemanager_api_url=http://h1:8088  
  622.   
  623.       # URL of the ProxyServer API  
  624.       proxy_api_url=http://h1:8088  
  625.   
  626.       # URL of the HistoryServer API  
  627.       history_server_api_url=http://h1:19888  
  628.   
  629.     # HA support by specifying multiple clusters  
  630.     # e.g.  
  631.   
  632.     # [[[ha]]]  
  633.       # Resource Manager logical name (required for HA)  
  634.       ## logical_name=my-rm-name  
  635.   
  636.   # Configuration for MapReduce (MR1)  
  637.   # ------------------------------------------------------------------------  
  638.   [[mapred_clusters]]  
  639.   
  640.     [[[default]]]  
  641.       # Enter the host on which you are running the Hadoop JobTracker  
  642.      jobtracker_host=h1  
  643.   
  644.       # The port where the JobTracker IPC listens on  
  645.      #jobtracker_port=8021  
  646.   
  647.       # JobTracker logical name for HA  
  648.       ## logical_name=  
  649.   
  650.       # Thrift plug-in port for the JobTracker  
  651.       ## thrift_port=9290  
  652.   
  653.       # Whether to submit jobs to this cluster  
  654.       submit_to=False  
  655.   
  656.       # Change this if your MapReduce cluster is Kerberos-secured  
  657.       ## security_enabled=false  
  658.   
  659.     # HA support by specifying multiple clusters  
  660.     # e.g.  
  661.   
  662.     # [[[ha]]]  
  663.       # Enter the logical name of the JobTrackers  
  664.       # logical_name=my-jt-name  
  665.   
  666.   
  667. ###########################################################################  
  668. # Settings to configure the Filebrowser app  
  669. ###########################################################################  
  670.   
  671. [filebrowser]  
  672.   # Location on local filesystem where the uploaded archives are temporary stored.  
  673.   ## archive_upload_tempdir=/tmp  
  674.   
  675. ###########################################################################  
  676. # Settings to configure liboozie  
  677. ###########################################################################  
  678.   
  679. [liboozie]  
  680.   # The URL where the Oozie service runs on. This is required in order for  
  681.   # users to submit jobs. Empty value disables the config check.  
  682.   ## oozie_url=http://localhost:11000/oozie  
  683.   oozie_url=http://h1:11000/oozie  
  684.   
  685.   # Requires FQDN in oozie_url if enabled  
  686.   ## security_enabled=false  
  687.   
  688.   # Location on HDFS where the workflows/coordinator are deployed when submitted.  
  689.   remote_deployement_dir=/user/hue/oozie/deployments  
  690.   
  691.   
  692. ###########################################################################  
  693. # Settings to configure the Oozie app  
  694. ###########################################################################  
  695.   
  696. [oozie]  
  697.   # Location on local FS where the examples are stored.  
  698.   local_data_dir=apps/oozie/examples/  
  699.   
  700.   # Location on local FS where the data for the examples is stored.  
  701.   ## sample_data_dir=...thirdparty/sample_data  
  702.   
  703.   # Location on HDFS where the oozie examples and workflows are stored.  
  704.   remote_data_dir=apps/oozie/workspaces  
  705.   
  706.   # Maximum of Oozie workflows or coodinators to retrieve in one API call.  
  707.   oozie_jobs_count=100  
  708.   
  709.   # Use Cron format for defining the frequency of a Coordinator instead of the old frequency number/unit.  
  710.   ## enable_cron_scheduling=true  
  711.   enable_cron_scheduling=true  
  712.   
  713.   
  714. ###########################################################################  
  715. # Settings to configure Beeswax with Hive  
  716. ###########################################################################  
  717.   
  718. [beeswax]  
  719.   
  720.   # Host where HiveServer2 is running.  
  721.   # If Kerberos security is enabled, use fully-qualified domain name (FQDN).  
  722.   hive_server_host=h1  
  723.   
  724.   # Port where HiveServer2 Thrift server runs on.  
  725.   hive_server_port=10000  
  726.   
  727.   # Hive configuration directory, where hive-site.xml is located  
  728.   hive_conf_dir=/home/search/hive/conf  
  729.   
  730.   # Timeout in seconds for thrift calls to Hive service  
  731.   server_conn_timeout=120  
  732.   
  733.   # Set a LIMIT clause when browsing a partitioned table.  
  734.   # A positive value will be set as the LIMIT. If 0 or negative, do not set any limit.  
  735.   browse_partitioned_table_limit=250  
  736.   
  737.   # A limit to the number of rows that can be downloaded from a query.  
  738.   # A value of -1 means there will be no limit.  
  739.   # A maximum of 65,000 is applied to XLS downloads.  
  740.   download_row_limit=1000000  
  741.   
  742.   # Hue will try to close the Hive query when the user leaves the editor page.  
  743.   # This will free all the query resources in HiveServer2, but also make its results inaccessible.  
  744.   ## close_queries=false  
  745.   
  746.   # Thrift version to use when communicating with HiveServer2  
  747.   ## thrift_version=5  
  748.   
  749.   [[ssl]]  
  750.     # SSL communication enabled for this server.  
  751.     ## enabled=false  
  752.   
  753.     # Path to Certificate Authority certificates.  
  754.     ## cacerts=/etc/hue/cacerts.pem  
  755.   
  756.     # Path to the private key file.  
  757.     ## key=/etc/hue/key.pem  
  758.   
  759.     # Path to the public certificate file.  
  760.     ## cert=/etc/hue/cert.pem  
  761.   
  762.     # Choose whether Hue should validate certificates received from the server.  
  763.     ## validate=true  
  764.   
  765.   
  766. ###########################################################################  
  767. # Settings to configure Pig  
  768. ###########################################################################  
  769.   
  770. [pig]  
  771.   # Location of piggybank.jar on local filesystem.  
  772.   local_sample_dir=/home/search/hue/apps/pig/examples  
  773.   
  774.   # Location piggybank.jar will be copied to in HDFS.  
  775.   remote_data_dir=/home/search/pig/examples  
  776.   
  777.   
  778. ###########################################################################  
  779. # Settings to configure Sqoop  
  780. ###########################################################################  
  781.   
  782. [sqoop]  
  783.   # For autocompletion, fill out the librdbms section.  
  784.   
  785.   # Sqoop server URL  
  786.   server_url=http://h1:12000/sqoop  
  787.   
  788.   
  789. ###########################################################################  
  790. # Settings to configure Proxy  
  791. ###########################################################################  
  792.   
  793. [proxy]  
  794.   # Comma-separated list of regular expressions,  
  795.   # which match 'host:port' of requested proxy target.  
  796.   ## whitelist=(localhost|127\.0\.0\.1):(50030|50070|50060|50075)  
  797.   
  798.   # Comma-separated list of regular expressions,  
  799.   # which match any prefix of 'host:port/path' of requested proxy target.  
  800.   # This does not support matching GET parameters.  
  801.   ## blacklist=  
  802.   
  803.   
  804. ###########################################################################  
  805. # Settings to configure Impala  
  806. ###########################################################################  
  807.   
  808. [impala]  
  809.   # Host of the Impala Server (one of the Impalad)  
  810.   ## server_host=localhost  
  811.   
  812.   # Port of the Impala Server  
  813.   ## server_port=21050  
  814.   
  815.   # Kerberos principal  
  816.   ## impala_principal=impala/hostname.foo.com  
  817.   
  818.   # Turn on/off impersonation mechanism when talking to Impala  
  819.   ## impersonation_enabled=False  
  820.   
  821.   # Number of initial rows of a result set to ask Impala to cache in order  
  822.   # to support re-fetching them for downloading them.  
  823.   # Set to for disabling the option and backward compatibility.  
  824.   ## querycache_rows=50000  
  825.   
  826.   # Timeout in seconds for thrift calls  
  827.   ## server_conn_timeout=120  
  828.   
  829.   # Hue will try to close the Impala query when the user leaves the editor page.  
  830.   # This will free all the query resources in Impala, but also make its results inaccessible.  
  831.   ## close_queries=true  
  832.   
  833.   # If QUERY_TIMEOUT_S > 0, the query will be timed out (i.e. cancelled) if Impala does not do any work  
  834.   # (compute or send back results) for that query within QUERY_TIMEOUT_S seconds.  
  835.   ## query_timeout_s=600  
  836.   
  837.   
  838. ###########################################################################  
  839. # Settings to configure HBase Browser  
  840. ###########################################################################  
  841.   
  842. [hbase]  
  843.   # Comma-separated list of HBase Thrift servers for clusters in the format of '(name|host:port)'.  
  844.   # Use full hostname with security.  
  845.   ## hbase_clusters=(Cluster|localhost:9090)  
  846.   
  847.   # HBase configuration directory, where hbase-site.xml is located.  
  848.   ## hbase_conf_dir=/etc/hbase/conf  
  849.   
  850.   # Hard limit of rows or columns per row fetched before truncating.  
  851.   ## truncate_limit = 500  
  852.   
  853.   # 'buffered' is the default of the HBase Thrift Server and supports security.  
  854.   # 'framed' can be used to chunk up responses,  
  855.   # which is useful when used in conjunction with the nonblocking server in Thrift.  
  856.   ## thrift_transport=buffered  
  857.   
  858.   
  859. ###########################################################################  
  860. # Settings to configure Solr Search  
  861. ###########################################################################  
  862.   
  863. [search]  
  864.   
  865.   # URL of the Solr Server  
  866.   solr_url=http://172.21.50.41:8983/solr/  
  867.   
  868.   # Requires FQDN in solr_url if enabled  
  869.   ## security_enabled=false  
  870.   
  871.   ## Query sent when no term is entered  
  872.   ## empty_query=*:*  
  873.   
  874.   
  875. ###########################################################################  
  876. # Settings to configure Solr Indexer  
  877. ###########################################################################  
  878.   
  879. [indexer]  
  880.   
  881.   # Location of the solrctl binary.  
  882.   ## solrctl_path=/usr/bin/solrctl  
  883.   
  884.   # Location of the solr home.  
  885.   ## solr_home=/usr/lib/solr  
  886.   
  887.   # Zookeeper ensemble.  
  888.   ## solr_zk_ensemble=localhost:2181/solr  
  889.   
  890.   # The contents of this directory will be copied over to the solrctl host to its temporary directory.  
  891.   ## config_template_path=/../hue/desktop/libs/indexer/src/data/solr_configs  
  892.   
  893.   
  894. ###########################################################################  
  895. # Settings to configure Job Designer  
  896. ###########################################################################  
  897.   
  898. [jobsub]  
  899.   
  900.   # Location on local FS where examples and template are stored.  
  901.   ## local_data_dir=..../data  
  902.   
  903.   # Location on local FS where sample data is stored  
  904.   ## sample_data_dir=...thirdparty/sample_data  
  905.   
  906.   
  907. ###########################################################################  
  908. # Settings to configure Job Browser  
  909. ###########################################################################  
  910.   
  911. [jobbrowser]  
  912.   # Share submitted jobs information with all users. If set to false,  
  913.   # submitted jobs are visible only to the owner and administrators.  
  914.   ## share_jobs=true  
  915.   
  916.   
  917. ###########################################################################  
  918. # Settings to configure the Zookeeper application.  
  919. ###########################################################################  
  920.   
  921. [zookeeper]  
  922.   
  923.   [[clusters]]  
  924.   
  925.     [[[default]]]  
  926.       # Zookeeper ensemble. Comma separated list of Host/Port.  
  927.       # e.g. localhost:2181,localhost:2182,localhost:2183  
  928.       host_ports=zk1:2181  
  929.   
  930.       # The URL of the REST contrib service (required for znode browsing)  
  931.       ## rest_url=http://localhost:9998  
  932.   
  933.   
  934. ###########################################################################  
  935. # Settings to configure the Spark application.  
  936. ###########################################################################  
  937.   
  938. [spark]  
  939.   # URL of the REST Spark Job Server.  
  940.   server_url=http://h1:8080/  
  941.   
  942.   
  943. ###########################################################################  
  944. # Settings for the User Admin application  
  945. ###########################################################################  
  946.   
  947. [useradmin]  
  948.   # The name of the default user group that users will be a member of  
  949.   ## default_user_group=default  
  950.   
  951.   
  952. ###########################################################################  
  953. # Settings for the Sentry lib  
  954. ###########################################################################  
  955.   
  956. [libsentry]  
  957.   # Hostname or IP of server.  
  958.   ## hostname=localhost  
  959.   
  960.   # Port the sentry service is running on.  
  961.   ## port=8038  
  962.   
  963.   # Sentry configuration directory, where sentry-site.xml is located.  
  964.   ## sentry_conf_dir=/etc/sentry/conf  



编译好的目录如下: 

Java代码   收藏代码
  1. -rw-rw-r--  1 search search  2782 5月  19 06:04 app.reg  
  2. -rw-rw-r--  1 search search  2782 5月  19 05:41 app.reg.bak  
  3. drwxrwxr-x 22 search search  4096 5月  20 01:05 apps  
  4. drwxrwxr-x  3 search search  4096 5月  19 05:41 build  
  5. drwxr-xr-x  2 search search  4096 5月  19 05:40 data  
  6. drwxrwxr-x  7 search search  4096 5月  20 01:29 desktop  
  7. drwxrwxr-x  2 search search  4096 5月  19 05:41 dist  
  8. drwxrwxr-x  7 search search  4096 5月  19 05:40 docs  
  9. drwxrwxr-x  3 search search  4096 5月  19 05:40 ext  
  10. -rw-rw-r--  1 search search 11358 5月  19 05:38 LICENSE.txt  
  11. drwxrwxr-x  2 search search  4096 5月  20 01:29 logs  
  12. -rw-rw-r--  1 search search  8121 5月  19 05:41 Makefile  
  13. -rw-rw-r--  1 search search  8505 5月  19 05:41 Makefile.sdk  
  14. -rw-rw-r--  1 search search  3093 5月  19 05:40 Makefile.tarball  
  15. -rw-rw-r--  1 search search  3498 5月  19 05:41 Makefile.vars  
  16. -rw-rw-r--  1 search search  2302 5月  19 05:41 Makefile.vars.priv  
  17. drwxrwxr-x  2 search search  4096 5月  19 05:41 maven  
  18. -rw-rw-r--  1 search search   801 5月  19 05:40 NOTICE.txt  
  19. -rw-rw-r--  1 search search  4733 5月  19 05:41 README.rst  
  20. -rw-rw-r--  1 search search    52 5月  19 05:38 start.sh  
  21. -rw-rw-r--  1 search search    65 5月  19 05:41 stop.sh  
  22. drwxrwxr-x  9 search search  4096 5月  19 05:38 tools  
  23. -rw-rw-r--  1 search search   932 5月  19 05:41 VERSION  



6,启动hue,执行命令:build/env/bin/supervisor 

Java代码   收藏代码
  1. [search@h1 hue]$ build/env/bin/supervisor   
  2. [INFO] Not running as root, skipping privilege drop  
  3. starting server with options { 'ssl_certificate': None, 'workdir': None, 'server_name': 'localhost', 'host': '0.0.0.0', 'daemonize': False, 'threads': 10, 'pidfile': None, 'ssl_private_key': None, 'server_group': 'search', 'ssl_cipher_list': 'DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2', 'port': 8000, 'server_user': 'search'}  


然后我们就可以访问安装机ip+8000端口来查看了: 




工具箱界面: 

hive的界面: 



在配置hive(散仙这里是0.13的版本)的时候,需要注意以下几个方面: 

hive的metastrore的服务和hiveserver2服务都需要启动 
执行下面命令 
bin/hive --service metastore 
bin/hiveserver2 
除此之外,还需要关闭的hive的SAL认证,否则,使用hue访问会出现问题。 
注意下面三项的配置 

Java代码   收藏代码
  1.   
  2.   hive.metastore.warehouse.dir  
  3.   /user/hive/warehouse  
  4.   location of default database for the warehouse  
  5.   
  6.   
  7.   hive.server2.thrift.port  
  8.   10000  
  9.   Port number of HiveServer2 Thrift interface.  
  10.   Can be overridden by setting $HIVE_SERVER2_THRIFT_PORT  
  11.   
  12.   
  13.   
  14.   hive.server2.thrift.bind.host  
  15.   h1  
  16.   Bind host on which to run the HiveServer2 Thrift interface.  
  17.   Can be overridden by setting $HIVE_SERVER2_THRIFT_BIND_HOST  
  18.   
  19.   
  20.   
  21.   hive.server2.authentication  
  22.   NOSASL  
  23.     
  24.     Client authentication types.  
  25.        NONE: no authentication check  
  26.        LDAP: LDAP/AD based authentication  
  27.        KERBEROS: Kerberos/GSSAPI authentication  
  28.        CUSTOM: Custom authentication provider  
  29.                (Use with property hive.server2.custom.authentication.class)  
  30.        PAM: Pluggable authentication module.  
  31.     
  32.   




除了上面的配置外,还需要把hive.server2.long.polling.timeout的参数值,默认是5000L给改成5000,否则使用beenline连接时候,会出错,这是hive的一个bug。 



pig的界面: 


solr的界面如下: 



最后需要注意一点,hue也需要在hadoop的core-site.xml里面配置相应的代理用户,示例如下: 

Java代码   收藏代码
  1.   
  2.       hadoop.proxyuser.hue.hosts  
  3.      *  
  4.    
  5.   
  6.   
  7.      
  8.      hadoop.proxyuser.hue.groups  
  9.      *  
  10.       



ok至此,我们的hue已经能完美工作了,我们可以根据自己的需要,定制相应的app插件,非常灵活! 

转载于:https://www.cnblogs.com/bluejoe/p/5213641.html

你可能感兴趣的:(ldap,java,大数据)