hive 集成sentry

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

环境

apache-hive-2.3.3-bin
apache-sentry-2.1.0-bin
1
2
sentry是目前最新的版本,支持hive的最高版本为2.3.3,hive版本如果高于2.3.3,会出一些版本兼容问题[亲测]

hive快速安装
wget http://mirrors.shu.edu.cn/apache/hive/hive-2.3.3/apache-hive-2.3.3-bin.tar.gz
tar -zxvf apache-hive-2.3.3-bin.tar.gz
1
2
配置hive-site.xml

 mv hive-default.xml.template hive-site.xml
 mkdir -p /home/xiaobin/soft/apache-hive-2.3.3-bin/tmpdir
 vi hive-site.xml
 
   <property>
    <name>system:java.io.tmpdir</name>
    <value>/home/xiaobin/soft/apache-hive-2.3.3-bin/tmpdir</value>
  </property>
  <property>
    <name>system:user.name</name>
    <value>master</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.1.115/hive2?createDatabaseIfNotExist=true&amp;useUnicode=true</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
下载驱动

yum install mysql-connector-java -y
查看安装路径
[root@cluster-master conf]# rpm -qa|grep  mysql-connector-java  
mysql-connector-java-5.1.25-3.el7.noarch
[root@cluster-master conf]# rpm -ql  mysql-connector-java-5.1.25-3.el7.noarch
/usr/share/doc/mysql-connector-java-5.1.25
/usr/share/doc/mysql-connector-java-5.1.25/CHANGES
/usr/share/doc/mysql-connector-java-5.1.25/COPYING
/usr/share/doc/mysql-connector-java-5.1.25/docs
/usr/share/doc/mysql-connector-java-5.1.25/docs/README.txt
/usr/share/doc/mysql-connector-java-5.1.25/docs/connector-j.html
/usr/share/doc/mysql-connector-java-5.1.25/docs/connector-j.pdf
/usr/share/java/mysql-connector-java.jar
/usr/share/maven-fragments/mysql-connector-java
/usr/share/maven-poms/JPP-mysql-connector-java.pom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
copy mysql-connector驱动

cp /usr/share/java/mysql-connector-java.jar apache-hive-2.3.3-bin/lib/
1
创建元数据数据库

mysql> create database hive2;
Query OK, 1 row affected (0.01 sec)
1
2
初始化元数据

schematool -dbType mysql -initSchema
1
sentry安装
下载
http://sentry.apache.org/general/downloads.html
wget http://apache.01link.hk/sentry/2.1.0/apache-sentry-2.1.0-bin.tar.gz
tar -zxvf apache-sentry-2.1.0-bin.tar.gz
1
2
3
config
cp sentry-site.xml.service.example sentry-site.xml
vi sentry-site.xml


<property>
    <name>sentry.hive.server</name>
    <value>server1</value>
  </property>

  <property>
    <name>sentry.verify.schema.version</name>
    <value>true</value>
  </property>


  <property>
    <name>sentry.service.allow.connect</name>
    <value>hive,impala,hue,hdfs</value>
    <description>comma separated list of users - List of users that are allowed to connect to the service (eg Hive, Impala) </description>
  </property>

  <property>
    <name>sentry.store.jdbc.url</name>
    <value>jdbc:mysql://localhost:3306/sentry</value>
    <description>JDBC connection URL for the backed DB</description>
  </property>

  <property>
    <name>sentry.store.jdbc.user</name>
    <value>sentry</value>
    <description>The username of the user that connects to the Sentry database</description>
  </property>

  <property>
    <name>sentry.store.jdbc.password</name>
    <value>sentry</value>
    <description>Sentry password for backend JDBC user </description>
  </property>

  <property>
    <name>sentry.service.server.keytab</name>
    <value></value>
    <description>Keytab for service principal</description>
  </property>

  <property>
    <name>sentry.service.server.rpcport</name>
    <value>8038</value>
    <description> TCP port number for service</description>
  </property>

  <property>
    <name>sentry.service.server.rpcaddress</name>
    <value>0.0.0.0</value>
    <description> TCP interface for service to bind to</description>
  </property>

  <property>
    <name>sentry.store.jdbc.driver</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Backend JDBC driver - org.apache.derby.jdbc.EmbeddedDriver (only when dbtype = derby) JDBC Driver class for the backed DB</description>
  </property>
 
  <property>
    <name>sentry.service.admin.group</name>
    <value>hive,impala,hue,hdfs</value>
    <description>Comma separates list of groups.  List of groups allowed to make policy updates</description>
  </property>

  <property>
    <name>sentry.store.group.mapping</name>
    <value>org.apache.sentry.provider.common.HadoopGroupMappingService</value>
    <description>
    Group mapping class for Sentry service. org.apache.sentry.provider.file.LocalGroupMapping service can be used for local group mapping. </description>
  </property>

  <property>
    <name>sentry.store.group.mapping.resource</name>
    <value> </value>
    <description> Policy file for group mapping. Policy file path for local group mapping, when sentry.store.group.mapping is set to LocalGroupMapping Service class.</description>
  </property>

  <property>
    <name>sentry.service.security.mode</name>
    <value>none</value>
    <description>Options: kerberos, none.  Authentication mode for Sentry service. Currently supports Kerberos and trusted mode </description>
  </property>
 
  <property>
    <name>sentry.service.server.principal</name>
    <value> </value>
    <description>Service Kerberos principal</description>
  </property>

  <property>
    <name>sentry.service.web.enable</name>
    <value>true</value>
    <description>Enable web service</description>
  </property>

  <property>
    <name>sentry.service.web.authentication.type</name>
    <value>NONE</value>
    <description>Options: kerberos, NONE.  Authentication mode for Sentry web service.</description>
  </property>

  <property>
    <name>sentry.service.web.authentication.kerberos.keytab</name>
    <value></value>
    <description>Keytab for web service principal</description>
  </property>

  <property>
    <name>sentry.service.web.authentication.kerberos.principal</name>
    <value></value>
    <description>Web service Kerberos principal</description>
  </property>

  <property>
    <name>sentry.service.web.authentication.allow.connect.users</name>
    <value></value>
    <description>comma separated list of users - List of users that are allowed to connect to the web service (eg Hive, Impala) </description>
  </property>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
创建sentry元数据数据库

Create Database sentry;
Create User sentry Identified By 'sentry';
Grant All On sentry.* To sentry@'localhost' Identified By 'sentry';
Grant All On sentry.* To sentry@'%' Identified By 'sentry';
flush privileges;
1
2
3
4
5
复制mysql-connector驱动

cp mysql-connector-java.jar apache-sentry-2.1.0-bin/lib/
1
初始化元数据

sentry --command schema-tool --conffile apache-sentry-2.1.0-bin/conf/sentry-site.xml --dbType mysql --initSchema

1
2
启动service

./sentry --command service --conffile apache-sentry-2.1.0-bin/conf/sentry-site.xml
1
查看是否启动成功

netstat -anpl|grep 8038
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:8038            0.0.0.0:*               LISTEN      11950/java
1
2
3
4
hive集成sentry
copy sentry 客户端配置文件

cp apache-sentry-2.1.0-bin/conf/sentry-site.xml.hive-client.example apache-hive-2.3.3-bin/conf/
cd apache-hive-2.3.3-bin/conf/
mv sentry-site.xml.hive-client.example sentry-site.xml
1
2
3
配置$HIVE_HOME/conf/sentry-site.xml

<property>
    <name>sentry.service.security.mode</name>
    <value>none</value>
    <description>Options: kerberos, none.  Authentication mode for Sentry service. Currently supports Kerberos and trusted mode </description>
  </property>
 

  <property>
    <name>sentry.service.client.server.rpc-addresses</name>
    <value>localhost</value>
    <description> TCP address of the sentry store server</description>
  </property>

  <property>
    <name>sentry.service.client.server.rpc-port</name>
    <value>8038</value>
    <description>Port # of the sentry store server</description>
  </property>

  <property>
    <name>sentry.service.client.server.rpc-connection-timeout</name>
    <value>200000</value>
    <description>Client timeout default(200000) RPC connection timeout in milisecs</description>
  </property>

  <property>
    <name>sentry.metastore.service.users</name>
    <value>hive</value>
    <description>
      Comma separated list of users
      List of service users (eg hive, impala) to bypass
      the Sentry metastore authorization. These
      services handle the metadata authorization
      on their side.
    </description>
  </property>

<!--
    Some common client properties same as file
    based provider
-->

  <property>
    <name>sentry.hive.provider</name>
    <value>org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider</value>
    <description> Deprecated name: hive.sentry.provider.  Group mapping which should be used at client side</description>
  </property>

  <property>
    <name>sentry.hive.server</name>
    <value>server1</value>
    <description> Deprecated name: hive.sentry.server.  Defaut: HS2.  Hive Server2 Server identifier like "server1"</description>
  </property>

  <property>
    <name>sentry.hive.failure.hooks</name>
    <value> </value>
    <description>Deprecated Name:  hive.sentry.failure.hooks</description>
  </property>
  
  <property>
        <name>sentry.hive.testing.mode</name>
        <value>true</value>
  </property>

  <property>
    <name>sentry.hive.provider.backend</name>
    <value>org.apache.sentry.provider.db.SimpleDBProviderBackend</value>
    <description> Options: {org.apache.sentry.provider.db.SimpleDBProviderBackend, org.apache.sentry.provider.file.SimpleFileProviderBackend}
      Privilege provider to be used, we support file based or db based
    </description>
  </property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
vi hive-site.xml

<property>
    <name>hive.metastore.pre.event.listeners</name>
    <value>org.apache.sentry.binding.metastore.MetastoreAuthzBinding</value>
</property>

<property>
    <name>hive.metastore.event.listeners</name>
    <value>org.apache.sentry.binding.metastore.SentrySyncHMSNotificationsPostEventListener</value>
</property>


<property>
    <name>hive.server2.enable.impersonation</name>
    <value>true</value>
</property>

<property>
    <name>hive.security.authorization.task.factory</name>
     <value>org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl</value>
</property>

<property>
     <name>hive.server2.session.hook</name>
     <value>org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook</value>
</property>

<property>
     <name>hive.sentry.conf.url</name>
     <value>file:///home/xiaobin/soft/apache-hive-2.3.3-bin/conf/sentry-site.xml</value>
</property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
copy sentry jars

cp apache-sentry-2.1.0-bin/lib/sentry-*.jar  apache-hive-2.3.3-bin/lib/
cp apache-sentry-2.1.0-bin/lib/shiro-*  apache-hive-2.3.3-bin/lib/

1
2
3
启动hiveserver2

hiveserver2 --hiveconf hive.root.logger=INFO,console
1
查看hiveserver2监听端口

 netstat -anpl|grep 10000
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN 
--------------------- 

使用hive用户登陆,在这个hive用户是在$HIVE_HOME/conf/sentry-site.xml中配置,

  <property>
    <name>sentry.metastore.service.users</name>
    <value>hive</value>
  </property>
1
2
3
4
,hive是用于授权的账号,可以理解为超级用户

beeline -u 'jdbc:hive2://localhost:10000' -n hive
1
查看所有roles,当前没有任何role

0: jdbc:hive2://localhost:10000> show roles;
+-------+
| role  |
+-------+
+-------+
1
2
3
4
5
创建admin role:admin_role,

create role admin_role;
GRANT ALL ON SERVER server1 TO ROLE admin_role;
1
2
admin_role拥有server1上的所有权限,server1是再sentry-site.xml中配置

<property>
    <name>sentry.hive.server</name>
    <value>server1</value>
  </property>
1
2
3
4
简单理解拥有admin_role的用户组,拥有所有权限
将hive用户组设置为管理员用户,并使用hive用户创建数据库test

GRANT ROLE admin_role TO GROUP hive;
create database test;


0: jdbc:hive2://localhost:10000> create database test;
No rows affected (0.172 seconds)
0: jdbc:hive2://localhost:10000> show databases;
+----------------+
| database_name  |
+----------------+
| default        |
| filtered       |
| sensitive      |
| test           |
| test1          |
+----------------+
5 rows selected (0.334 seconds)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
创建测试role,并将xn_role分配给xn用户组

0: jdbc:hive2://localhost:10000> create role xn_role;
No rows affected (0.095 seconds)
0: jdbc:hive2://localhost:10000> GRANT ROLE xn_role TO GROUP xn;
No rows affected (0.118 seconds)
1
2
3
4
xn这个拥有xn_role,但是xn_role没有任何权限

使用xn用户登陆
beeline -u 'jdbc:hive2://localhost:10000' -n xn

show databases没有任何库列表输出
0: jdbc:hive2://localhost:10000> show databases;
+----------------+
| database_name  |
+----------------+
| default        |
+----------------+
1 row selected (0.71 seconds)

并且也没有建库权限

0: jdbc:hive2://localhost:10000> create database xn;
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User xn does not have privileges for CREATEDATABASE
 The required privileges: Server=server1->action=create->grantOption=false; (state=42000,code=40000)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
现在用hive用户账户创建数据库xn,并将xn_role的权限附给xn;

0: jdbc:hive2://localhost:10000> create database xn
. . . . . . . . . . . . . . . .> ;
No rows affected (0.196 seconds)
0: jdbc:hive2://localhost:10000> GRANT ALL ON DATABASE xn TO ROLE xn_role;
No rows affected (0.1 seconds)
0: jdbc:hive2://localhost:10000> GRANT ROLE xn_role TO GROUP xn;
No rows affected (0.135 seconds)

1
2
3
4
5
6
7
8
使用xn用户登陆

beeline -u 'jdbc:hive2://localhost:10000' -n xn
0: jdbc:hive2://localhost:10000> show databases;
+----------------+
| database_name  |
+----------------+
| default        |
| xn             |
+----------------+
2 rows selected (0.651 seconds)
0: jdbc:hive2://localhost:10000> 
1
2
3
4
5
6
7
8
9
10
查看当前用户roles

0: jdbc:hive2://localhost:10000> SHOW CURRENT ROLES;
+----------+
|   role   |
+----------+
| xn_role  |
+----------+
1 row selected (0.119 seconds)
1
2
3
4
5
6
7
查看xn_role拥有的权限

0: jdbc:hive2://localhost:10000> SHOW GRANT ROLE xn_role;
+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| database  | table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| xn        |        |            |         | xn_role         | ROLE            | *          | false         | 1540965346000  | --       |
+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
1 row selected (0.112 seconds)

1
2
3
4
5
6
7
8
给xn_role添加表sensitive.events查询权限

GRANT SELECT ON table sensitive.events TO ROLE xn_role;

0: jdbc:hive2://localhost:10000>  SHOW GRANT ROLE xn_role;
+------------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
|  database  |  table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+------------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| xn         |         |            |         | xn_role         | ROLE            | *          | false         | 1540965346000  | --       |
| sensitive  | events  |            |         | xn_role         | ROLE            | SELECT     | false         | 1540971733000  | --       |
+------------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
0: jdbc:hive2://localhost:10000> select * from sensitive.events;
+---------------+-----------------+----------------+----------------+
|   events.ip   | events.country  | events.client  | events.action  |
+---------------+-----------------+----------------+----------------+
| 10.1.2.3      | US              | android        | createNote     |
| 10.200.88.99  | FR              | windows        | updateNote     |
| 10.1.2.3      | US              | android        | updateNote     |
| 10.200.88.77  | FR              | ios            | createNote     |
| 10.1.4.5      | US              | windows        | updateTag      |
+---------------+-----------------+----------------+----------------+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
可以看到xn这个用户已经可以查询表sensitive.events,之前授权的时候只给了select权限,现在来尝试插入一些数据,首先先创建一个表xn.events

0: jdbc:hive2://localhost:10000> create table xn.events as select * from sensitive.events;
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
No rows affected (18.355 seconds)
0: jdbc:hive2://localhost:10000> 

1
2
3
4
5
尝试插入数据

0: jdbc:hive2://localhost:10000> insert into sensitive.events select * from xn.events;
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User xn does not have privileges for QUERY
 The required privileges: Server=server1->Db=sensitive->Table=events->action=insert->grantOption=false; (state=42000,code=40000)
1
2
3
4
现在用hive账号给xn_role添加对表sensitive.events的所有权限

0: jdbc:hive2://localhost:10000>  GRANT ALL ON table sensitive.events TO ROLE xn_role;
No rows affected (0.083 seconds)
1
2
查看xn用户权限

0: jdbc:hive2://localhost:10000>  SHOW GRANT ROLE xn_role;
+------------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
|  database  |  table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+------------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| xn         |         |            |         | xn_role         | ROLE            | *          | false         | 1540965346000  | --       |
| sensitive  | events  |            |         | xn_role         | ROLE            | *          | false         | 1540972283000  | --       |
+------------+---------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+

1
2
3
4
5
6
7
8
可以看到xn已经又有了对表sensitive.events的所有权限

0: jdbc:hive2://localhost:10000> insert into sensitive.events select * from xn.events;
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
No rows affected (17.397 seconds)
0: jdbc:hive2://localhost:10000> select * from sensitive.events;
+---------------+-----------------+----------------+----------------+
|   events.ip   | events.country  | events.client  | events.action  |
+---------------+-----------------+----------------+----------------+
| 10.1.2.3      | US              | android        | createNote     |
| 10.200.88.99  | FR              | windows        | updateNote     |
| 10.1.2.3      | US              | android        | updateNote     |
| 10.200.88.77  | FR              | ios            | createNote     |
| 10.1.4.5      | US              | windows        | updateTag      |
| 10.1.2.3      | US              | android        | createNote     |
| 10.200.88.99  | FR              | windows        | updateNote     |
| 10.1.2.3      | US              | android        | updateNote     |
| 10.200.88.77  | FR              | ios            | createNote     |
| 10.1.4.5      | US              | windows        | updateTag      |
| 10.1.2.3      | US              | android        | createNote     |
| 10.200.88.99  | FR              | windows        | updateNote     |
| 10.1.2.3      | US              | android        | updateNote     |
| 10.200.88.77  | FR              | ios            | createNote     |
| 10.1.4.5      | US              | windows        | updateTag      |
+---------------+-----------------+----------------+----------------+
15 rows selected (0.412 seconds)
0: jdbc:hive2://localhost:10000>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
数据已经插入到表sensitive.events

现在来看下怎样收回权限,首先来收回xn_role对表的所有权限

0: jdbc:hive2://localhost:10000> REVOKE ALL ON Table sensitive.events from role xn_role;
No rows affected (0.125 seconds)
1
2
查看xn_role的权限

0: jdbc:hive2://localhost:10000>  SHOW GRANT ROLE xn_role;
+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| database  | table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
| xn        |        |            |         | xn_role         | ROLE            | *          | false         | 1540965346000  | --       |
+-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+
0: jdbc:hive2://localhost:10000> select * from sensitive.events;
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User xn does not have privileges for QUERY
 The required privileges: Server=server1->Db=sensitive->Table=events->action=select->grantOption=false; (state=42000,code=40000)
注意
这里账号xn,test,hive均为linux用户,在指定user使用beeline时,linux系统必须要有对应的用户组,否则会报group not exists的错误,或者授权已经成功,但是权限不生效

转载于:https://my.oschina.net/hblt147/blog/2987608

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word模板生成word报表文档

主要功能为根据word模板生成word报表文档,注意引用Interop.Word.dll;首先要生成word程序对象Word.Application app new Word.Application();根据模板文件生成新文件框架File.Copy(TemplateFile, FileName);生成documnet对象ord.Document doc new Word.Document(); 打开…

isql 测试mysql连接_[libco] 协程库学习,测试连接 mysql

历史原因&#xff0c;一直使用 libev 作为服务底层&#xff1b;异步框架虽然性能比较高&#xff0c;但新人学习和使用门槛非常高&#xff0c;而且串行的逻辑被打散为状态机&#xff0c;这也会严重影响生产效率。用同步方式实现异步功能&#xff0c;既保证了异步性能优势&#x…

什么是数据仓库,何时以及为什么要考虑一个

The term “Data Warehouse” is widely used in the data analytics world, however, it’s quite common for people who are new with data analytics to ask the above question.术语“数据仓库”在数据分析领域中被广泛使用&#xff0c;但是&#xff0c;对于数据分析新手来…

安装好MongoDB,但服务中没有MongoDB服务的解决办法

以管理员身份打开CMD&#xff0c;添加路径添加服务即可 winX 然后再选Amongod -dbpath "D:\MongoDB\Server\3.6\data\db" -logpath "D:\MongoDB\Server\3.6\data\log\mongo.log" -install -serviceName "MongoDB"转载于:https://www.cnblogs.com…

DRF数据验证+数据存储

1.验证数据的自定义类 class BooksDRFt(serializers.ModelSerializer):class Meta:model Bookfields __all__#要验证的字段author serializers.CharField(requiredFalse)#要验证的字段name serializers.CharField(min_length2, error_messages{required: 不能为空, min_len…

mysql变量 exec_MySQL slave_exec_mode 参数说明

背景&#xff1a;今天无意当中看到参数slave_exec_mode&#xff0c;从手册里的说明看出该参数和MySQL复制相关&#xff0c;是可以动态修改的变量&#xff0c;默认是STRICT模式(严格模式)&#xff0c;可选值有IDEMPOTENT模式(幂等模式)。设置成IDEMPOTENT模式可以让从库避免1032…

C#word

主要功能为根据word模板生成word报表文档,注意引用Interop.Word.dll;首先要生成word程序对象Word.Application app new Word.Application();根据模板文件生成新文件框架File.Copy(TemplateFile, FileName);生成documnet对象ord.Document doc new Word.Document(); 打开…

机器学习kaggle竞赛实战-泰坦尼克号

数据展示 首先登kaggle 下载泰坦尼克训练相关数据 import pandas as pd import numpy as np data pd.read_csv(train.csv) print(data.shape) print(data.head) train data[:800] test data[800:] print(train.shape) print(test.shape)选择特征 selected_features [Pcl…

上海大都会 H.A Simple Problem with Integers

题目描述 You have N integers A1, A2, ... , AN. You are asked to write a program to receive and execute two kinds of instructions: C a b means performing Ai (Ai2 mod 2018) for all Ai such that a ≤ i ≤ b.Q a b means query the sum of Aa, Aa1, ..., Ab. Note…

探索性数据分析入门_入门指南:R中的探索性数据分析

探索性数据分析入门When I started on my journey to learn data science, I read through multiple articles that stressed the importance of understanding your data. It didn’t make sense to me. I was naive enough to think that we are handed over data which we p…

用Javascript代码实现浏览器菜单命令(以下代码在 Windows XP下的浏览器中调试通过

每当我们看到别人网页上的打开、打印、前进、另存为、后退、关闭本窗口、禁用右键等实现浏览器命令的链接&#xff0c;而自己苦于不能实现时&#xff0c;是不是感到很遗憾&#xff1f;是不是也想实现&#xff1f;如果能在网页上能实现浏览器的命令&#xff0c;将是多么有意思的…

mysql程序设计教程_MySQL教程_编程入门教程_牛客网

MySQL 索引MySQL索引的建立对于MySQL的高效运行是很重要的&#xff0c;索引可以大大提高MySQL的检索速度。打个比方&#xff0c;如果合理的设计且使用索引的MySQL是一辆兰博基尼的话&#xff0c;那么没有设计和使用索引的MySQL就是一个人力三轮车。拿汉语字典的目录页(索引)打比…

学习笔记整理之StringBuffer与StringBulider的线程安全与线程不安全

关于线程和线程不安全&#xff1a; 概述 编辑 如果你的代码所在的进程中有多个线程在同时运行&#xff0c;而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的&#xff0c;而且其他的变量的值也和预期的是一样的&#xff0c;就是线程安全的。或者说…

python web应用_为您的应用选择最佳的Python Web爬网库

python web应用Living in today’s world, we are surrounded by different data all around us. The ability to collect and use this data in our projects is a must-have skill for every data scientist.生活在当今世界中&#xff0c;我们周围遍布着不同的数据。 在我们的…

NDK-r14b + FFmpeg-release-3.4 linux下编译FFmpeg

下载资源 官网下载完NDK14b 和 FFmpeg 下载之后&#xff0c;更改FFmpeg 目录下configure问价如下&#xff1a; SLIBNAME_WITH_MAJOR$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF) LIB_INSTALL_EXTRA_CMD$$(RANLIB)"$(LIBDIR)/$(LIBNAME)" SLIB_INSTALL_NAME$(SLI…

C# WebBrowser自动填表与提交

C# WebBrowser自动填表与提交 默认分类 2007-04-18 15:47:17 阅读57 评论0 字号&#xff1a;大中小 订阅 要使我们的WebBrowser具有自动填表、甚至自动提交的功能&#xff0c;并不困难。   假设有一个最简单的登录页面&#xff0c;输入用户名密码&#xff0c;点“登录”…

html中列表导航怎么和图片对齐_HTML实战篇:html仿百度首页

本篇文章主要给大家介绍一下如何使用htmlcss来制作百度首页页面。1)制作页面所用的知识点我们首先来分析一下百度首页的页面效果图百度首页由头部的一个文字导航&#xff0c;中间的一个按钮和一个输入框以及下边的文字简介和导航组成。我们这里主要用到的知识点就是列表标签(ul…

C# 依赖注入那些事儿

原文地址&#xff1a;http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 里面有一个例子差了些代码&#xff0c;补全后贴上。 3.1.3 依赖获取 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml;//定义…

asp.net core Serilog的使用

先贴上关于使用这个日志组件的一些使用方法&#xff0c;等有时间了在吧官方的文档翻译一下吧&#xff0c;现在真是没时间。 Serilog在使用上主要分为两大块&#xff1a; 第一块是主库&#xff0c;包括Serilog以及Serilog.AspNetCore&#xff0c;如果导入后一个的话会自动导入前…

在FAANG面试中破解堆算法

In FAANG company interview, Candidates always come across heap problems. There is one question they do like to ask — Top K. Because these companies have a huge dataset and they can’t always go through all the data. Finding tope data is always a good opti…